Kako pronaći neispravne veze u Selenium
⚡ Pametni sažetak
Pronalaženje neispravnih veza u Selenium WebDriver uključuje prikupljanje svake oznake sidra, slanje HTTP HEAD zahtjeva svakoj URLi čitanje koda odgovora. Linkovi koji vraćaju 400 ili više označavaju se kao neispravni, dok valjani linkovi vraćaju kodove 2xx.

Što su prekinute veze?
Neispravne poveznice su poveznice ili URLkoji nisu dostupni. Moguće je da ne rade ili ne funkcioniraju zbog neke pogreške poslužitelja.
A URL uvijek će imati status 2xx, što je valjano. Postoje različiti HTTP statusni kodovi koji imaju različite svrhe. Za nevažeći zahtjev, HTTP status je 4xx i 5xx.
Klasa statusnih kodova 4xx uglavnom se odnosi na pogreške na strani klijenta, a klasa statusnih kodova 5xx uglavnom se odnosi na pogreške odgovora poslužitelja.
Najvjerojatnije nećemo moći potvrditi radi li ta veza ili ne dok je ne kliknemo i potvrdimo.
Zašto biste trebali provjeriti neispravne veze?
Uvijek biste trebali provjeriti da na web-mjestu nema neispravnih poveznica jer korisnik ne bi trebao završiti na stranici s pogreškom.
Pogreška se događa ako se pravila ne ažuriraju ispravno ili traženi resursi ne postoje na poslužitelju.
Ručna provjera poveznica je mukotrpan zadatak jer svaka web stranica može imati veliki broj poveznica i ručni postupak se mora ponoviti za sve stranice.
Skripta za automatizaciju koja koristi Selenium koji će automatizirati proces je prikladnije rješenje.
Kako provjeriti neispravne veze i slike Selenium
Za provjeru neispravnih veza morat ćete učiniti sljedeće korake.
- Prikupite sve poveznice na web stranici na temelju oznake.
- Pošaljite HTTP zahtjev za vezu i pročitajte HTTP kod odgovora.
- Na temelju HTTP koda odgovora saznajte je li veza valjana ili neispravna.
- Ponovite ovo za sve snimljene veze.
Code pronaći neispravne poveznice na web stranici
Ispod je kod web upravljačkog programa koji testira naš slučaj upotrebe:
package automationPractice; import java.io.IOException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.util.Iterator; import java.util.List; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; public class BrokenLinks { private static WebDriver driver = null; public static void main(String[] args) { // TODO Auto-generated method stub String homePage = "http://www.zlti.com"; String url = ""; HttpURLConnection huc = null; int respCode = 200; driver = new ChromeDriver(); driver.manage().window().maximize(); driver.get(homePage); List<WebElement> links = driver.findElements(By.tagName("a")); Iterator<WebElement> it = links.iterator(); while(it.hasNext()){ url = it.next().getAttribute("href"); System.out.println(url); if(url == null || url.isEmpty()){ System.out.println("URL is either not configured for anchor tag or it is empty"); continue; } if(!url.startsWith(homePage)){ System.out.println("URL belongs to another domain, skipping it."); continue; } try { huc = (HttpURLConnection)(new URL(url).openConnection()); huc.setRequestMethod("HEAD"); huc.connect(); respCode = huc.getResponseCode(); if(respCode >= 400){ System.out.println(url+" is a broken link"); } else{ System.out.println(url+" is a valid link"); } } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } driver.quit(); } }
Objašnjavajući kod neispravnih veza
Korak 1: Uvoz paketa
Uvezite donji paket uz zadane pakete:
import java.net.HttpURLConnection;
Koristeći metode u ovom paketu, možemo slati HTTP zahtjeve i uhvatiti HTTP kodove odgovora iz odgovora.
Korak 2: Prikupite sve veze na web stranici
Identificirajte sve poveznice na web stranici i pohranite ih u popis.
List<WebElement> links = driver.findElements(By.tagName("a"));
Nabavite iterator za kretanje kroz listu.
Iterator<WebElement> it = links.iterator();
Korak 3: Identificiranje i validacija URL
U ovom dijelu provjerit ćemo je li URL pripada domeni treće strane ili je URL je prazno/null.
Dohvatite href oznake sidra i pohranite ga u varijablu url.
url = it.next().getAttribute("href");
Provjerite je li URL je null ili prazan i preskočite preostale korake ako je uvjet ispunjen.
if(url == null || url.isEmpty()){ System.out.println("URL is either not configured for anchor tag or it is empty"); continue; }
Provjerite je li URL pripada glavnoj domeni ili trećoj strani. Preskočite preostale korake ako pripada domeni treće strane.
if(!url.startsWith(homePage)){ System.out.println("URL belongs to another domain, skipping it."); continue; }
Korak 4: Pošaljite HTTP zahtjev
HttpURLKlasa Connection ima metode za slanje HTTP zahtjeva i hvatanje HTTP koda odgovora. Dakle, izlaz metode openConnection() (URLConnection) je tipa cast na HttpURLVeza.
huc = (HttpURLConnection)(new URL(url).openConnection());
Možemo postaviti tip zahtjeva kao "HEAD" umjesto "GET", tako da se vraćaju samo zaglavlja, a ne tijelo dokumenta.
huc.setRequestMethod("HEAD");
Pozivanjem metode connect() uspostavlja se stvarna veza s URL-om i šalje se zahtjev.
huc.connect();
Korak 5: Provjera valjanosti veza
Korištenje funkcije getResponseCode() metodom, možemo dobiti kod odgovora za zahtjev.
respCode = huc.getResponseCode();
Na temelju koda odgovora pokušat ćemo provjeriti status veze.
if(respCode >= 400){ System.out.println(url+" is a broken link"); } else{ System.out.println(url+" is a valid link"); }
Dakle, možemo dobiti sve poveznice s web stranice i ispisati jesu li poveznice valjane ili neispravne.
Kako doći do SVE poveznice web stranice
Jedan od uobičajenih postupaka na webu Ispitivanje je testirati rade li sve veze unutar stranice. To se može jednostavno učiniti kombinacijom Java za-svaku petlju, pronađiElemente() & By.tagName("a") metoda.
Metoda findElements() vraća popis web elemenata s oznakom a. Korištenjem petlje for-each pristupa se svakom elementu.
WebDriver kod u nastavku provjerava svaku vezu iz Mercury Obilasci početne stranice za određivanje onih koji rade i onih koji su još u izradi.
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import java.util.List; import java.util.concurrent.TimeUnit; import org.openqa.selenium.*; public class P1 { public static void main(String[] args) { String baseUrl = "https://demo.guru99.com/test/newtours/"; System.setProperty("webdriver.chrome.driver", "G:\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); String underConsTitle = "Under Construction: Mercury Tours"; driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); driver.get(baseUrl); List<WebElement> linkElements = driver.findElements(By.tagName("a")); String[] linkTexts = new String[linkElements.size()]; int i = 0; //extract the link texts of each link element for (WebElement e : linkElements) { linkTexts[i] = e.getText(); i++; } //test each link for (String t : linkTexts) { driver.findElement(By.linkText(t)).click(); if (driver.getTitle().equals(underConsTitle)) { System.out.println("\"" + t + "\"" + " is under construction."); } else { System.out.println("\"" + t + "\"" + " is working."); } driver.navigate().back(); } driver.quit(); } }
Izlaz bi trebao biti sličan dolje navedenom.
- Pristup poveznicama slika vrši se pomoću metoda By.cssSelector() i By.xpath().
Rješavanje problema
U izoliranom slučaju, prva poveznica kojoj pristupi kod može biti poveznica "Početna". U takvom slučaju, akcija driver.navigate.back() prikazat će praznu stranicu jer je prva akcija otvaranje preglednika. Upravljački program neće moći pronaći sve ostale poveznice u praznom pregledniku. Stoga će IDE izbaciti iznimku i ostatak koda se neće izvršiti. To se može lako riješiti pomoću If petlje.


.png)