Hur man hittar trasiga länkar i Selenium

⚡ Smart sammanfattning

Hitta trasiga länkar i Selenium WebDriver involverar insamling av varje ankartagg, skickande av en HTTP HEAD-förfrågan till varje URLoch läser svarskoden. Länkar som returnerar 400 eller högre flaggas som trasiga, medan giltiga länkar returnerar 2xx-koder.

  • đź”— Definition: En trasig länk är en URL som inte kan nĂĄs, vanligtvis returnerar ett 4xx- eller 5xx-fel.
  • đź§­ Varför det gäller: Trasiga länkar skadar användarupplevelsen och SEO, sĂĄ automatiserade kontroller ersätter lĂĄngsam manuell verifiering.
  • 📥 Samla länkar: Använd findElements med By.tagName("a") för att samla alla ankarelement pĂĄ sidan i en lista.
  • 📡 Skicka HEAD-förfrĂĄgan: Ă–ppna en HttpURLAnslutning, sätt metoden till HEAD och läs svarskoden per URL.
  • âś… Validera status: Behandla en svarskod pĂĄ 400 eller högre som trasig och all 2xx-kod som en fungerande länk.

Hur man hittar trasiga länkar i Selenium

Vad är trasiga länkar?

Trasiga länkar är länkar eller URLsom inte är nåbara. De kan vara nere eller inte fungera på grund av något serverfel.

A URL kommer alltid att ha statusen 2xx, vilket är giltigt. Det finns olika HTTP-statuskoder som har olika syften. För en ogiltig begäran är HTTP-statusen 4xx och 5xx.

Statuskoden 4xx-klassen är huvudsakligen för klientsidesfel, och statuskoden 5xx-klassen är huvudsakligen för serversvarsfel.

Vi kommer sannolikt inte att kunna bekräfta om den länken fungerar eller inte förrän vi klickar och bekräftar den.

Varför ska du kolla Brutna länkar?

Du bör alltid se till att det inte finns några trasiga länkar på webbplatsen, eftersom användaren inte ska hamna på en felsida.

Felet uppstår om reglerna inte uppdateras korrekt, eller om de begärda resurserna inte finns på servern.

Manuell kontroll av länkar är en mödosam uppgift, eftersom varje webbsida kan ha ett stort antal länkar och den manuella processen måste upprepas för alla sidor.

Ett automatiseringsskript som använder Selenium som kommer att automatisera processen är en mer lämplig lösning.

Så här kontrollerar du brutna länkar och bilder Selenium

För att kontrollera de trasiga länkarna måste du göra följande steg.

  1. Samla alla länkar på webbsidan baserat på taggen.
  2. Skicka en HTTP-förfrågan för länken och läs HTTP-svarskoden.
  3. Ta reda på om länken är giltig eller trasig baserat på HTTP-svarskoden.
  4. Upprepa detta för alla länkar som tagits.

Code att hitta trasiga länkar på en webbsida

Nedan finns webbdrivrutinskoden som testar vårt användningsfall:

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

    }
}

Förklara koden för brutna länkar

Steg 1: Importera paket

Importera följande paket utöver standardpaketen:

import java.net.HttpURLConnection;

Med metoderna i det här paketet kan vi skicka HTTP-förfrågningar och fånga HTTP-svarskoder från svaret.

Steg 2: Samla alla länkar på webbsidan

Identifiera alla länkar på en webbsida och lagra dem i en lista.

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

Skaffa en iterator för att gå igenom listan.

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

Steg 3: Identifiera och validera URL

I den här delen ska vi kontrollera om en URL tillhör en tredjepartsdomän eller om den URL är tom/null.

Hämta href-filen från ankartaggen och lagra den i url-variabeln.

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

Kontrollera om URL är null eller tom och hoppar över de återstående stegen om villkoret är uppfyllt.

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

Kontrollera om URL tillhör en huvuddomän eller en tredje part. Hoppa över de återstående stegen om den tillhör en tredje parts domän.

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

Steg 4: Skicka HTTP-förfrågan

Http-filenURLConnection-klassen har metoder för att skicka en HTTP-förfrågan och samla in HTTP-svarskoden. Så utdata från openConnection()-metoden (URLAnslutning) är typkonverterad till HttpURLFörbindelse.

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

Vi kan ställa in förfrågningstypen som "HEAD" istället för "GET", så att endast rubriker returneras och inte dokumentets brödtext.

huc.setRequestMethod("HEAD");

När metoden connect() anropas upprättas den faktiska anslutningen till URL:en och begäran skickas.

huc.connect();

Steg 5: Validera länkar

Använda getResponseCode()-metoden kan vi hämta svarskoden för begäran.

respCode = huc.getResponseCode();

Baserat på svarskoden kommer vi att försöka kontrollera länkens status.

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

Således kan vi hämta alla länkar från en webbsida och skriva ut om länkarna är giltiga eller trasiga.

Hur man får ALLA länkar till en webbsida

En av de vanliga procedurerna i webben Testning är att testa om alla länkar som finns på sidan fungerar. Detta kan bekvämt göras med en kombination av Java för varje slinga, findElements() & By.tagName(”a”) metod.

Metoden findElements() returnerar en lista över webbelement med taggen a. Med hjälp av en for-each-loop nås varje element.

Få ALLA länkar till en webbsida

WebDriver-koden nedan kontrollerar varje länk från Mercury Tours hemsida för att avgöra vilka som fungerar och de som fortfarande är under uppbyggnad.

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

Utgången bör vara liknande den som anges nedan.

  • Ă…tkomst till bildlänkar görs med metoderna By.cssSelector() och By.xpath().

Få ALLA länkar till en webbsida

Felsökning

I ett isolerat fall kan den första länken som koden öppnar vara länken "Hem". I ett sådant fall kommer åtgärden driver.navigate.back() att visa en tom sida, eftersom den första åtgärden är att öppna en webbläsare. Drivrutinen kommer inte att kunna hitta alla andra länkar i en tom webbläsare. Så IDE:n kommer att generera ett undantag och resten av koden kommer inte att köras. Detta kan enkelt hanteras med en If-loop.

Vanliga frĂĄgor

Selenium samlar in alla ankartaggar, skickar en HTTP HEAD-förfrågan till varje URL, och markerar alla länkar som returnerar 400 eller högre som trasiga.

En 4xx-kod indikerar ett problem på klientsidan, till exempel en saknad sida, medan en 5xx-kod indikerar ett fel på serversidan vid bearbetning av begäran.

Ja. Bildkällor samlas in med By.cssSelector() eller By.xpath(), och sedan varje src URL valideras genom sin HTTP-svarskod.

Ja. AI-baserade sökrobotar skannar sidor, följer länkar och flaggar trasiga sidor eller omdirigerar dem. URLs utan manuell skriptning.

AI övervakar länkhälsa över tid, förutspår fel och föreslår ersättningar, vilket minskar upprepade manuella länkrevisioner.

Sammanfatta detta inlägg med: