Sådan finder du ødelagte links i Selenium

⚡ Smart opsummering

Finder ødelagte links i Selenium WebDriver involverer indsamling af alle ankertags og afsendelse af en HTTP HEAD-anmodning til hver enkelt. URLog læser svarkoden. Links, der returnerer 400 eller derover, markeres som ødelagte, mens gyldige links returnerer 2xx-koder.

  • 🔗 Definition: Et brudt link er et URL som ikke kan nås, normalt returnerer en 4xx- eller 5xx-fejl.
  • 🧭 Hvorfor det drejer sig om: Ødelagte links skader brugeroplevelsen og SEO, så automatiserede kontroller erstatter langsom manuel verifikation.
  • 📥 Saml links: Brug findElements med By.tagName("a") til at samle alle ankerelementer på siden i en liste.
  • 📡 Send HEAD-anmodning: Åbn en HttpURLForbindelse, indstil metoden til HEAD, og ​​læs svarkoden pr. URL.
  • Valider status: Betragt en svarkode på 400 eller højere som defekt og enhver 2xx-kode som et fungerende link.

Sådan finder du ødelagte links i Selenium

Hvad er ødelagte links?

Ødelagte links er links eller URLs, der ikke kan nås. De kan være nede eller ikke fungere på grund af en serverfejl.

A URL vil altid have status 2xx, hvilket er gyldigt. Der findes forskellige HTTP-statuskoder, som har forskellige formål. For en ugyldig anmodning er HTTP-status 4xx og 5xx.

Statuskoden 4xx-klassen er primært for klientsidefejl, og statuskoden 5xx-klassen er primært for serverresponsfejl.

Vi vil højst sandsynligt ikke være i stand til at bekræfte, om det link virker eller ej, før vi klikker og bekræfter det.

Hvorfor skal du tjekke Ødelagte links?

Du bør altid sørge for, at der ikke er nogen ødelagte links på siden, da brugeren ikke bør lande på en fejlside.

Fejlen opstår, hvis reglerne ikke er opdateret korrekt, eller de anmodede ressourcer ikke findes på serveren.

Manuel kontrol af links er en besværlig opgave, fordi hver webside kan have et stort antal links, og den manuelle proces skal gentages for alle sider.

Et automatiseringsscript, der bruger Selenium der vil automatisere processen er en mere passende løsning.

Sådan tjekker du de ødelagte links og billeder ind Selenium

For at kontrollere de ødelagte links skal du udføre følgende trin.

  1. Saml alle links på websiden baseret på tagget.
  2. Send en HTTP-anmodning om linket, og læs HTTP-svarkoden.
  3. Find ud af, om linket er gyldigt eller defekt, baseret på HTTP-svarkoden.
  4. Gentag dette for alle de fangede links.

Code at finde de ødelagte links på en webside

Nedenfor er webdriverkoden, som tester vores use case:

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

    }
}

Forklaring af koden for Broken Links

Trin 1: Importer pakker

Importer nedenstående pakke ud over standardpakkerne:

import java.net.HttpURLConnection;

Ved at bruge metoderne i denne pakke kan vi sende HTTP-anmodninger og fange HTTP-svarkoder fra svaret.

Trin 2: Saml alle links på websiden

Identificer alle links på en webside og gem dem i en liste.

List<WebElement> links = driver.findElements(By.tagName("a"));

Få en iterator til at gennemgå listen.

Iterator<WebElement> it = links.iterator();

Trin 3: Identificering og validering URL

I denne del vil vi undersøge, om en URL tilhører et tredjepartsdomæne, eller om URL er tom/nul.

Hent href'en fra ankertagget og gem den i url-variablen.

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

Kontroller om URL er null eller tom, og spring de resterende trin over, hvis betingelsen er opfyldt.

if(url == null || url.isEmpty()){
              System.out.println("URL is either not configured for anchor tag or it is empty");
              continue;
     }

Kontroller, om URL tilhører et hoveddomæne eller en tredjepart. Spring de resterende trin over, hvis det tilhører et tredjepartsdomæne.

 if(!url.startsWith(homePage)){
           System.out.println("URL belongs to another domain, skipping it.");
           continue;
   }

Trin 4: Send HTTP-anmodning

Http'enURLConnection-klassen har metoder til at sende en HTTP-anmodning og registrere HTTP-svarkoden. Så outputtet fra openConnection()-metoden (URLForbindelse) er typecastet til HttpURLForbindelse.

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

Vi kan indstille anmodningstypen til "HEAD" i stedet for "GET", så kun headere returneres og ikke dokumentets brødtekst.

huc.setRequestMethod("HEAD");

Når connect()-metoden kaldes, etableres den faktiske forbindelse til URL'en, og anmodningen sendes.

huc.connect();

Trin 5: Validering af links

Brug af getResponseCode() metode, kan vi få svarkoden til anmodningen.

respCode = huc.getResponseCode();

Baseret på svarkoden vil vi forsøge at kontrollere linkstatus.

if(respCode >= 400){
        System.out.println(url+" is a broken link");
}
else{
        System.out.println(url+" is a valid link");
}

Således kan vi hente alle links fra en webside og udskrive, om linkene er gyldige eller ødelagte.

Sådan får du ALLE links til en webside

En af de almindelige procedurer i web Test er at teste om alle links på siden virker. Dette kan bekvemt gøres ved at bruge en kombination af Java for hver sløjfe, findElements() & By.tagName(“a”) fremgangsmåde.

Metoden findElements() returnerer en liste over webelementer med tagget a. Ved hjælp af en for-each-løkke tilgås hvert element.

Få ALLE links til en webside

WebDriver-koden nedenfor kontrollerer hvert link fra Mercury Tours hjemmeside for at bestemme dem, der fungerer, og dem, der stadig er under opbygning.

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();
    }
}

Outputtet skal svare til det, der er angivet nedenfor.

  • Adgang til billedlinks gøres ved hjælp af metoderne By.cssSelector() og By.xpath().

Få ALLE links til en webside

Fejlfinding

I et isoleret tilfælde kan det første link, som koden tilgår, være "Hjem"-linket. I et sådant tilfælde vil handlingen driver.navigate.back() vise en tom side, da den første handling er at åbne en browser. Driveren vil ikke kunne finde alle andre links i en tom browser. Så IDE'en vil kaste en undtagelse, og resten af ​​koden vil ikke udføres. Dette kan nemt håndteres ved hjælp af en If-løkke.

Ofte Stillede Spørgsmål

Selenium indsamler alle ankertags, sender en HTTP HEAD-anmodning til hver URL, og markerer ethvert link, der returnerer 400 eller højere, som brudt.

En 4xx-kode angiver et problem på klientsiden, f.eks. en manglende side, mens en 5xx-kode angiver en fejl på serversiden under behandling af anmodningen.

Ja. Billedkilder indsamles med By.cssSelector() eller By.xpath(), og derefter hver kildekode URL valideres via sin HTTP-svarkode.

Ja. AI-baserede crawlere scanner sider, følger links og markerer defekte eller omdirigerer. URLs uden manuel scripting.

AI overvåger linktilstand over tid, forudsiger fejl og foreslår udskiftninger, hvilket reducerer gentagne manuelle linkrevisioner.

Opsummer dette indlæg med: