Cum să găsiți toate / linkuri rupte folosind Selenium Webdriver

Cuprins:

Anonim

Ce sunt legăturile rupte?

Linkurile rupte sunt linkuri sau adrese URL care nu sunt accesibile. Este posibil să nu funcționeze sau să nu funcționeze din cauza unor erori de server

O adresă URL va avea întotdeauna o stare cu 2xx, care este validă. Există diferite coduri de stare HTTP care au scopuri diferite. Pentru o solicitare nevalidă, starea HTTP este 4xx și 5xx.

Clasa 4xx a codului de stare este în principal pentru eroarea de partea clientului, iar clasa 5xx a codurilor de stare este în principal pentru eroarea de răspuns a serverului.

Cel mai probabil nu vom putea confirma dacă acel link funcționează sau nu până nu îl facem clic și confirmăm.

De ce ar trebui să verificați linkurile rupte?

Ar trebui să vă asigurați întotdeauna că nu există linkuri rupte pe site, deoarece utilizatorul nu ar trebui să ajungă într-o pagină de eroare.

Eroarea se întâmplă dacă regulile nu sunt actualizate corect sau dacă resursele solicitate nu există pe server.

Verificarea manuală a legăturilor este o sarcină plictisitoare, deoarece fiecare pagină web poate avea un număr mare de legături și procesul manual trebuie repetat pentru toate paginile.

Un script de automatizare care utilizează Selenium care va automatiza procesul este o soluție mai potrivită.

Cum să verificați linkurile și imaginile rupte

Pentru verificarea legăturilor rupte, va trebui să parcurgeți pașii următori.

  1. Colectați toate linkurile din pagina web pe baza etichetei .
  2. Trimiteți cerere HTTP pentru link și citiți codul de răspuns HTTP.
  3. Aflați dacă linkul este valid sau rupt pe baza codului de răspuns HTTP.
  4. Repetați acest lucru pentru toate linkurile capturate.

Cod pentru a găsi linkurile rupte pe o pagină web

Mai jos este codul driverului web care testează cazul nostru de utilizare:

automatizarea pachetelorPractic;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 {driver static WebDriver privat = nul;public static main main (String [] args) {// TODO Metoda generată automatString homePage = "http://www.zlti.com";String url = "";HttpURLConnection huc = nul;int respCode = 200;driver = nou ChromeDriver ();driver.manage (). window (). maximize ();driver.get (HomePage);Lista  link-uri = driver.findElements (By.tagName ("a"));Iterator  it = links.iterator ();while (it.hasNext ()) {url = it.next (). getAttribute ("href");System.out.println (url);if (url == nul || url.isEmpty ()) {System.out.println ("URL-ul fie nu este configurat pentru eticheta de ancorare, fie este gol");continua;}if (! url.startsWith (homePage)) {System.out.println ("URL-ul aparține unui alt domeniu, omitându-l.");continua;}încerca {huc = (HttpURLConnection) (new URL (url) .openConnection ());huc.setRequestMethod ("CAP");huc.connect ();respCode = huc.getResponseCode ();if (respCode> = 400) {System.out.println (url + "este o legătură întreruptă");}altceva {System.out.println (url + "este un link valid");}} catch (MalformedURLException e) {// TODO Bloc de captare generat automate.printStackTrace ();} catch (IOException e) {// TODO Bloc de captare generat automate.printStackTrace ();}}driver.quit ();}}

Explicarea codului Exemplu

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 în Listă.

Lista  link-uri = driver.findElements (By.tagName ("a"));

Obțineți Iterator pentru a parcurge lista.

Iterator  it = links.iterator ();

Pasul 3: identificarea și validarea URL-ului

În această parte, vom verifica dacă adresa URL aparține domeniului terță parte sau dacă adresa URL este goală / nulă.

Obțineți href de etichetă de ancorare și stocați-o în variabila URL.

url = it.next (). getAttribute ("href");

Verificați dacă adresa URL este nulă sau goală și săriți pașii rămași dacă condiția este îndeplinită.

if (url == nul || url.isEmpty ()) {System.out.println ("URL-ul fie nu este configurat pentru eticheta de ancorare, fie este gol");continua;}

Verificați dacă adresa URL aparține unui domeniu principal sau unei terțe părți. Săriți pașii rămași dacă aparține unui domeniu terță parte.

 if (! url.startsWith (homePage)) {System.out.println ("URL-ul aparține unui alt domeniu, omitându-l.");continua;}

Pasul 4: trimiteți cererea http

Clasa HttpURLConnection are metode pentru a trimite cerere HTTP și a captura codul de răspuns HTTP. Deci, ieșirea metodei openConnection () (URLConnection) este de tip casted la HttpURLConnection.

huc = (HttpURLConnection) (new URL (url) .openConnection ());

Putem seta tipul de cerere ca „HEAD” în loc de „GET”. Astfel încât numai anteturile sunt returnate și nu corpul documentului.

huc.setRequestMethod ("CAP");

La invocarea metodei connect (), conexiunea efectivă la adresa URL este stabilită și solicitarea este trimisă.

huc.connect ();

Pasul 5: validarea linkurilor

Folosind metoda getResponseCode () putem obține codul de răspuns pentru cerere

respCode = huc.getResponseCode ();

Pe baza codului de răspuns, vom încerca să verificăm starea linkului.

if (respCode> = 400) {System.out.println (url + "este o legătură întreruptă");}altceva {System.out.println (url + "este un link valid");}

Astfel, putem obține toate linkurile de pe pagina web și putem imprima dacă linkurile sunt valide sau rupte.

Sper că acest tutorial vă ajută să verificați legăturile rupte folosind seleniu.

Cum să obțineți TOATE legăturile unei pagini web

Una dintre procedurile obișnuite în testarea web este de a testa dacă toate linkurile prezente în pagină funcționează. Acest lucru poate fi realizat în mod convenabil folosind o combinație a Java pentru fiecare buclă , metoda findElements () & By.tagName („a”) .

Metoda findElements (), returnează o listă de elemente web cu eticheta a. Folosind o buclă pentru fiecare, fiecare element este accesat.

Codul WebDriver de mai jos verifică fiecare link de pe pagina principală Mercury Tours pentru a determina cele care funcționează și cele 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. *;clasa publica P1 {public static main main (String [] args) {String baseUrl = "http://demo.guru99.com/test/newtours/";System.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");Driver WebDriver = nou ChromeDriver ();String underConsTitle = "În construcție: tururi cu mercur";driver.manage (). timeouts (). implicit Așteptați (5, TimeUnit.SECONDS);driver.get (baseUrl);Listă  linkElements = driver.findElements (By.tagName ("a"));String [] linkTexts = new String [linkElements.size ()];int i = 0;// extrageți textele legăturilor pentru fiecare element de legăturăpentru (WebElement e: linkElements) {linkTexts [i] = e.getText ();i ++;}// testați fiecare legăturăpentru (Șir t: linkTexte) {driver.findElement (By.linkText (t)). click ();if (driver.getTitle (). egal cu (underConsTitle)) {System.out.println ("\" "+ t +" \ ""+ "este în construcție.");} altceva {System.out.println ("\" "+ t +" \ ""+ "funcționează.");}driver.navigate (). back ();}driver.quit ();}}

Ieșirea trebuie să fie similară cu cea indicată mai jos.

  • Accesarea legăturilor de imagine se face folosind metodele By.cssSelector () și By.xpath ().
  • Depanare

    Într-un caz izolat, primul link accesat de cod ar putea fi linkul „Acasă”. În acest caz, acțiunea driver.navigate.back () va afișa o pagină goală pe măsură ce prima acțiune deschide un browser. Șoferul nu va putea găsi toate celelalte linkuri într-un browser gol. Deci IDE va ​​arunca o excepție și restul codului nu se va executa. Acest lucru poate fi gestionat cu ușurință utilizând o buclă If.