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.

  • 🔗 Definiție: O legătură ruptă este o URL care nu poate fi accesată, returnând de obicei o eroare 4xx sau 5xx.
  • 🧭 De ce contează: Linkurile nefuncționale dăunează experienței utilizatorului și SEO-ului, așa că verificările automate înlocuiesc verificarea manuală lentă.
  • 📥 Colectați linkuri: Folosește findElements cu By.tagName(„a”) pentru a aduna fiecare element ancoră de pe pagină într-o listă.
  • 📡 Trimiteți cererea HEAD: Deschideți un HttpURLConexiune, setați metoda la HEAD și citiți codul de răspuns conform URL.
  • Validare stare: Tratați un cod de răspuns de 400 sau mai mare ca fiind defect și orice cod 2xx ca o legătură funcțională.

Cum să găsiți linkuri rupte în Selenium

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.

  1. Colectează toate linkurile din pagina web pe baza etichetei.
  2. Trimiteți o cerere HTTP pentru link și citiți codul de răspuns HTTP.
  3. Află dacă linkul este valid sau nefuncțional pe baza codului de răspuns HTTP.
  4. 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.

Obțineți TOATE linkurile unei pagini web

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().

Obțineți TOATE linkurile unei pagini web

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.

Întrebări frecvente

Selenium colectează toate etichetele ancoră, trimite o cerere HTTP HEAD către fiecare URLși marchează orice link care returnează 400 sau mai mult ca fiind nefuncțional.

Un cod 4xx indică o problemă la nivelul clientului, cum ar fi o pagină lipsă, în timp ce un cod 5xx indică o eroare la nivelul serverului în timpul procesării cererii.

Da. Sursele de imagini sunt colectate cu By.cssSelector() sau By.xpath(), iar apoi fiecare sursă URL este validat prin codul său de răspuns HTTP.

Da. Crawlerele bazate pe inteligență artificială scanează pagini, urmăresc linkuri și semnalează paginile defecte sau redirecționările. URLs fără scriptare manuală.

IA monitorizează starea de sănătate a legăturilor în timp, prezice erorile și sugerează înlocuiri, reducând auditurile manuale repetate ale legăturilor.

Rezumați această postare cu: