Cum să găsiți linkuri rupte în Selenium
⚡ Rezumat inteligent
Găsirea linkurilor defecte în Selenium WebDriver implică colectarea fiecărei etichete ancoră, trimiterea unei cereri HTTP HEAD către fiecare URLși citind codul de răspuns. Linkurile care returnează 400 sau mai mult sunt marcate ca fiind defecte, în timp ce linkurile valide returnează coduri 2xx.

Ce sunt link-urile sparte?
Linkurile nefuncționale sunt linkuri sau URLcare nu sunt accesibile. Este posibil să fie nefuncționale sau să nu funcționeze din cauza unei erori de server.
A URL va avea întotdeauna statusul 2xx, care este valid. Există diferite coduri de status HTTP care au scopuri diferite. Pentru o cerere invalidă, statusul HTTP este 4xx și 5xx.
Clasa 4xx de coduri de stare este în principal pentru erorile din partea clientului, iar clasa 5xx de coduri de stare este în principal pentru erorile de răspuns ale serverului.
Cel mai probabil, nu vom putea confirma dacă acel link funcționează sau nu până când îl vom face clic și îl vom confirma.
De ce ar trebui să verificați linkurile întrerupte?
Ar trebui să vă asigurați întotdeauna că nu există linkuri defecte pe site, deoarece utilizatorul nu ar trebui să ajungă pe o pagină de eroare.
Eroarea apare dacă regulile nu sunt actualizate corect sau resursele solicitate nu există pe server.
Verificarea manuală a linkurilor este o sarcină plictisitoare, deoarece fiecare pagină web poate avea un număr mare de linkuri, iar procesul manual trebuie repetat pentru toate paginile.
Un script de automatizare care folosește Selenium care va automatiza procesul este o soluție mai potrivită.
Cum să verificați linkurile și imaginile sparte în Selenium
Pentru a verifica legăturile rupte, va trebui să parcurgeți următorii pași.
- Colectează toate linkurile din pagina web pe baza etichetei.
- Trimiteți o cerere HTTP pentru link și citiți codul de răspuns HTTP.
- Află dacă linkul este valid sau nefuncțional pe baza codului de răspuns HTTP.
- Repetați acest lucru pentru toate linkurile capturate.
Code pentru a găsi linkurile defecte pe o pagină web
Mai jos este codul driverului web care testează cazul nostru de utilizare:
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(); } }
Explicarea codului de legături sparte
Pasul 1: importați pachete
Importați pachetul de mai jos, pe lângă pachetele implicite:
import java.net.HttpURLConnection;
Folosind metodele din acest pachet, putem trimite cereri HTTP și captura coduri de răspuns HTTP din răspuns.
Pasul 2: Colectați toate linkurile din pagina web
Identificați toate linkurile dintr-o pagină web și stocați-le într-o listă.
List<WebElement> links = driver.findElements(By.tagName("a"));
Obțineți un iterator pentru a parcurge lista.
Iterator<WebElement> it = links.iterator();
Pasul 3: Identificarea și validarea URL
În această parte, vom verifica dacă un URL aparține unui domeniu terț sau dacă URL este gol/nul.
Obțineți href-ul etichetei ancoră și stocați-l în variabila url.
url = it.next().getAttribute("href");
Verificați dacă URL este nul sau gol și se sar peste pașii rămași dacă condiția este îndeplinită.
if(url == null || url.isEmpty()){ System.out.println("URL is either not configured for anchor tag or it is empty"); continue; }
Verificați dacă URL aparține unui domeniu principal sau unei terțe părți. Sari peste pașii rămași dacă aparține unui domeniu terț.
if(!url.startsWith(homePage)){ System.out.println("URL belongs to another domain, skipping it."); continue; }
Pasul 4: Trimiteți cererea HTTP
Http-ulURLClasa Connection are metode pentru a trimite o cerere HTTP și a captura codul de răspuns HTTP. Așadar, rezultatul metodei openConnection() (URLConexiune) este convertită la tip HttpURLConexiune.
huc = (HttpURLConnection)(new URL(url).openConnection());
Putem seta tipul Cererii ca „HEAD” în loc de „GET”, astfel încât să fie returnate doar anteturile și nu corpul documentului.
huc.setRequestMethod("HEAD");
La invocarea metodei connect(), se stabilește conexiunea propriu-zisă la adresa URL și se trimite cererea.
huc.connect();
Pasul 5: Validarea linkurilor
Utilizarea funcției getResponseCode(), putem obține codul de răspuns pentru solicitare.
respCode = huc.getResponseCode();
Pe baza codului de răspuns, vom încerca să verificăm starea legăturii.
if(respCode >= 400){ System.out.println(url+" is a broken link"); } else{ System.out.println(url+" is a valid link"); }
Astfel, putem obține toate linkurile de pe o pagină web și putem afișa dacă linkurile sunt valide sau nefuncționale.
Cum să obțineți TOATE linkurile unei pagini web
Una dintre procedurile comune în web Testarea este de a testa dacă toate linkurile prezente în pagină funcționează. Acest lucru se poate face convenabil folosind o combinație a Java pentru-fiecare buclă, findElements() & By.tagName(„a”) metodă.
Metoda findElements() returnează o listă de elemente web cu eticheta a. Fiecare element este accesat folosind o buclă for-each.
Codul WebDriver de mai jos verifică fiecare link de la Mercury Pagina de pornire a tururilor pentru a determina pe cei care funcționează și pe cei care sunt încă în construcție.
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(); } }
Ieșirea ar trebui să fie similară cu cea indicată mai jos.
- Accesarea linkurilor către imagini se face folosind metodele By.cssSelector() și By.xpath().
Depanare
Într-un caz izolat, primul link accesat de cod ar putea fi linkul „Acasă”. Într-un astfel de caz, acțiunea driver.navigate.back() va afișa o pagină goală, deoarece prima acțiune este deschiderea unui browser. Driverul nu va putea găsi toate celelalte linkuri într-un browser gol. Așadar, IDE-ul va genera o excepție, iar restul codului nu se va executa. Acest lucru poate fi gestionat cu ușurință folosind o buclă If.


.png)