Hvordan finne ødelagte koblinger i Selenium

⚡ Smart oppsummering

Finne ødelagte lenker i Selenium WebDriver innebærer å samle inn alle ankertaggene, sende en HTTP HEAD-forespørsel til hver av dem. URL, og leser svarkoden. Lenker som returnerer 400 eller høyere markeres som ødelagte, mens gyldige lenker returnerer 2xx-koder.

  • 🔗 Definisjon: En ødelagt lenke er en URL som ikke kan nås, vanligvis returnerer en 4xx- eller 5xx-feil.
  • 🧭 Hvorfor det er viktig: Ødelagte lenker skader brukeropplevelsen og SEO, så automatiserte kontroller erstatter langsom manuell verifisering.
  • 📥 Samle lenker: Bruk findElements med By.tagName("a") for å samle alle ankerelementene på siden i en liste.
  • 📡 Send HEAD-forespørsel: Åpne en HttpURLTilkobling, sett metoden til HEAD, og ​​les svarkoden per URL.
  • Valider status: Behandle en svarkode på 400 eller høyere som ødelagt og enhver 2xx-kode som en fungerende lenke.

Hvordan finne ødelagte koblinger i Selenium

Hva er ødelagte koblinger?

Ødelagte lenker er lenker eller URLsom ikke kan nås. De kan være nede eller ikke fungere på grunn av en serverfeil.

A URL vil alltid ha statusen 2xx, som er gyldig. Det finnes forskjellige HTTP-statuskoder som har forskjellige formål. For en ugyldig forespørsel er HTTP-statusen 4xx og 5xx.

Statuskoden 4xx-klassen er hovedsakelig for feil på klientsiden, og statuskoden 5xx-klassen er hovedsakelig for serverresponsfeil.

Vi vil mest sannsynlig ikke kunne bekrefte om den lenken fungerer eller ikke før vi klikker og bekrefter den.

Hvorfor bør du sjekke ødelagte lenker?

Du bør alltid sørge for at det ikke finnes ødelagte lenker på nettstedet, fordi brukeren ikke skal lande på en feilside.

Feilen oppstår hvis reglene ikke oppdateres riktig, eller de forespurte ressursene ikke eksisterer på serveren.

Manuell sjekk av lenker er en kjedelig oppgave, fordi hver nettside kan ha et stort antall lenker, og den manuelle prosessen må gjentas for alle sider.

Et automatiseringsskript som bruker Selenium som vil automatisere prosessen er en mer passende løsning.

Slik sjekker du de ødelagte koblingene og bildene Selenium

For å sjekke de ødelagte koblingene, må du gjøre følgende trinn.

  1. Samle alle lenkene på nettsiden basert på taggen.
  2. Send en HTTP-forespørsel om lenken og les HTTP-svarkoden.
  3. Finn ut om lenken er gyldig eller ødelagt basert på HTTP-svarkoden.
  4. Gjenta dette for alle lenkene som er tatt.

Code for å finne ødelagte lenker på en nettside

Nedenfor er nettdriverkoden som tester vår brukssituasjon:

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

    }
}

Forklarer koden til Broken Links

Trinn 1: Importer pakker

Importer pakken nedenfor i tillegg til standardpakkene:

import java.net.HttpURLConnection;

Ved å bruke metodene i denne pakken kan vi sende HTTP-forespørsler og fange opp HTTP-svarkoder fra svaret.

Trinn 2: Samle alle lenker på nettsiden

Identifiser alle lenker på en nettside og lagre dem i en liste.

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

Skaff deg en iterator for å gå gjennom listen.

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

Trinn 3: Identifisering og validering URL

I denne delen skal vi sjekke om en URL tilhører et tredjepartsdomene eller om URL er tom/null.

Hent href-en fra ankertaggen og lagre den i url-variabelen.

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

Sjekk om URL er null eller tom, og hopp over de resterende trinnene hvis betingelsen er oppfylt.

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

Sjekk om URL tilhører et hoveddomene eller en tredjepart. Hopp over de gjenværende trinnene hvis det tilhører et tredjepartsdomene.

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

Trinn 4: Send HTTP-forespørsel

Http-enURLConnection-klassen har metoder for å sende en HTTP-forespørsel og fange HTTP-svarkoden. Så utdataene fra openConnection()-metoden (URLConnection) er typecastet til HttpURLTilkobling.

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

Vi kan sette forespørselstypen som «HEAD» i stedet for «GET», slik at bare overskrifter returneres og ikke dokumentets brødtekst.

huc.setRequestMethod("HEAD");

Når connect()-metoden kalles, opprettes den faktiske forbindelsen til URL-en, og forespørselen sendes.

huc.connect();

Trinn 5: Validering av koblinger

Bruk av getResponseCode()-metoden, kan vi få svarkoden for forespørselen.

respCode = huc.getResponseCode();

Basert på svarkoden vil vi prøve å sjekke lenkestatusen.

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

Dermed kan vi hente alle lenker fra en nettside og skrive ut om lenkene er gyldige eller ødelagte.

Hvordan få ALLE koblinger til en nettside

En av de vanlige prosedyrene i web Testing er å teste om alle lenkene på siden fungerer. Dette kan enkelt gjøres ved å bruke en kombinasjon av Java for hver løkke, findElements() & By.tagName(“a”) metoden.

findElements()-metoden returnerer en liste over webelementer med taggen a. Ved å bruke en for-each-løkke aksesseres hvert element.

Få ALLE lenker til en nettside

WebDriver-koden nedenfor kontrollerer hver lenke fra Mercury Tours hjemmeside for å finne de som fungerer og de som fortsatt er under konstruksjon.

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

Utgangen skal være lik den som er angitt nedenfor.

  • Tilgang til bildelenker gjøres ved hjelp av metodene By.cssSelector() og By.xpath().

Få ALLE lenker til en nettside

Feilsøking

I et isolert tilfelle kan den første lenken koden åpner være «Hjem»-lenken. I et slikt tilfelle vil handlingen driver.navigate.back() vise en blank side, ettersom den første handlingen er å åpne en nettleser. Driveren vil ikke kunne finne alle andre lenker i en tom nettleser. Så IDE-en vil kaste et unntak, og resten av koden vil ikke kjøres. Dette kan enkelt håndteres ved hjelp av en If-løkke.

Spørsmål og svar

Selenium samler alle ankerkoder, sender en HTTP HEAD-forespørsel til hver URL, og markerer enhver lenke som returnerer 400 eller høyere som ødelagt.

En 4xx-kode indikerer et problem på klientsiden, for eksempel en manglende side, mens en 5xx-kode indikerer en feil på serversiden under behandling av forespørselen.

Ja. Bildekilder samles inn med By.cssSelector() eller By.xpath(), og deretter hver kilde URL valideres gjennom HTTP-svarkoden.

Ja. AI-baserte robotsøkeprogrammer skanner sider, følger lenker og flagger ødelagte sider eller omdirigerer dem. URLs uten manuell skripting.

AI overvåker lenkehelse over tid, forutsier feil og foreslår erstatninger, noe som reduserer gjentatte manuelle lenkerevisjoner.

Oppsummer dette innlegget med: