So finden Sie defekte Links in Selenium

โšก Intelligente Zusammenfassung

Defekte Links finden in Selenium WebDriver beinhaltet das Sammeln aller Anker-Tags und das Senden einer HTTP-HEAD-Anfrage an jeden einzelnen. URLund liest den Antwortcode. Links, die den Statuscode 400 oder hรถher zurรผckgeben, werden als defekt markiert, wรคhrend gรผltige Links den Statuscode 2xx zurรผckgeben.

  • ๐Ÿ”— Definition: Ein defekter Link ist ein URL Diese Seite ist nicht erreichbar und gibt in der Regel einen 4xx- oder 5xx-Fehler zurรผck.
  • ๐Ÿงญ Warum es wichtig ist: Defekte Links beeintrรคchtigen die Benutzerfreundlichkeit und die Suchmaschinenoptimierung, daher ersetzen automatisierte Prรผfungen die langsame manuelle รœberprรผfung.
  • ๐Ÿ“ฅ Links sammeln: Verwenden Sie findElements mit By.tagName(โ€œaโ€), um alle Ankerelemente auf der Seite in einer Liste zu sammeln.
  • ๐Ÿ“ก HEAD-Anfrage senden: ร–ffnen Sie eine HTTP-SeiteURLVerbindung herstellen, die Methode auf HEAD setzen und den Antwortcode pro URL.
  • โœ… Validierungsstatus: Ein Antwortcode von 400 oder hรถher gilt als defekt, ein Code der Stufe 2xx hingegen als funktionierender Link.

So finden Sie defekte Links in Selenium

Was sind defekte Links?

Defekte Links sind Links oder URLDie Dienste sind nicht erreichbar. Mรถglicherweise sind sie aufgrund eines Serverfehlers ausgefallen oder funktionieren nicht.

A URL Der Statuscode ist immer 2xx und somit gรผltig. Es gibt verschiedene HTTP-Statuscodes mit unterschiedlichen Bedeutungen. Bei einer ungรผltigen Anfrage lautet der HTTP-Statuscode 4xx oder 5xx.

Die Statuscodeklasse 4xx steht hauptsรคchlich fรผr clientseitige Fehler, die Statuscodeklasse 5xx hingegen hauptsรคchlich fรผr Fehler in der Serverantwort.

Wir werden hรถchstwahrscheinlich erst dann bestรคtigen kรถnnen, ob dieser Link funktioniert, wenn wir darauf klicken und ihn bestรคtigen.

Warum sollten Sie defekte Links รผberprรผfen?

Sie sollten stets sicherstellen, dass sich keine defekten Links auf der Website befinden, da der Benutzer nicht auf einer Fehlerseite landen sollte.

Der Fehler tritt auf, wenn die Regeln nicht korrekt aktualisiert werden oder die angeforderten Ressourcen auf dem Server nicht vorhanden sind.

Die manuelle รœberprรผfung von Links ist eine mรผhsame Aufgabe, da jede Webseite eine groรŸe Anzahl von Links haben kann und der manuelle Prozess fรผr alle Seiten wiederholt werden muss.

Ein Automatisierungsskript, das verwendet Selenium eine Automatisierung des Prozesses ist eine geeignetere Lรถsung.

So checken Sie defekte Links und Bilder ein Selenium

Um die defekten Links zu รผberprรผfen, mรผssen Sie die folgenden Schritte ausfรผhren.

  1. Sammle alle Links auf der Webseite anhand des Tags.
  2. Senden Sie eine HTTP-Anfrage fรผr den Link und lesen Sie den HTTP-Antwortcode aus.
  3. Anhand des HTTP-Antwortcodes lรคsst sich feststellen, ob der Link gรผltig oder defekt ist.
  4. Wiederholen Sie dies fรผr alle erfassten Links.

Code um defekte Links auf einer Webseite zu finden

Unten finden Sie den Webtreibercode, der unseren Anwendungsfall testet:

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

    }
}

Erklรคren des Codes von Broken Links

Schritt 1: Pakete importieren

Importieren Sie zusรคtzlich zu den Standardpaketen das folgende Paket:

import java.net.HttpURLConnection;

Mit den Methoden in diesem Paket kรถnnen wir HTTP-Anfragen senden und HTTP-Antwortcodes aus der Antwort erfassen.

Schritt 2: Sammeln Sie alle Links auf der Webseite

Alle Links auf einer Webseite identifizieren und in einer Liste speichern.

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

Einen Iterator zum Durchlaufen der Liste erhalten.

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

Schritt 3: Identifizieren und Validieren URL

In diesem Abschnitt werden wir prรผfen, ob ein URL gehรถrt zu einer Domain eines Drittanbieters oder ob die URL ist leer/null.

Ermitteln Sie den href-Wert des Anker-Tags und speichern Sie ihn in der URL-Variablen.

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

รœberprรผfen Sie, ob die URL Wenn die Bedingung erfรผllt ist, wird geprรผft, ob die Bedingung null oder leer ist. Falls ja, werden die restlichen Schritte รผbersprungen.

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

รœberprรผfen Sie, ob die URL Gehรถrt es zu einer Hauptdomain oder einer Drittanbieterdomain? รœberspringen Sie die restlichen Schritte, wenn es zu einer Drittanbieterdomain gehรถrt.

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

Schritt 4: HTTP-Anfrage senden

Die HTTP-SeiteURLDie Klasse Connection verfรผgt รผber Methoden zum Senden einer HTTP-Anfrage und zum Erfassen des HTTP-Antwortcodes. Die Ausgabe der Methode openConnection() (URLConnection) wird in Http umgewandelt.URLVerbindung.

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

Wir kรถnnen den Anfragetyp auf โ€žHEADโ€œ anstatt auf โ€žGETโ€œ setzen, sodass nur die Header und nicht der Dokumentinhalt zurรผckgegeben werden.

huc.setRequestMethod("HEAD");

Beim Aufruf der connect()-Methode wird die eigentliche Verbindung zur URL hergestellt und die Anfrage gesendet.

huc.connect();

Schritt 5: Links validieren

Verwendung von getResponseCodeMit der Methode () kรถnnen wir den Antwortcode fรผr die Anfrage abrufen.

respCode = huc.getResponseCode();

Anhand des Antwortcodes werden wir versuchen, den Verbindungsstatus zu รผberprรผfen.

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

Somit kรถnnen wir alle Links einer Webseite abrufen und ausgeben, ob die Links gรผltig oder defekt sind.

So erhalten Sie ALLE Links einer Webseite

Eines der hรคufigsten Verfahren im Web Tests besteht darin, zu testen, ob alle auf der Seite vorhandenen Links funktionieren. Dies kann bequem durch eine Kombination der beiden erfolgen Java for-each-Schleife, findElements() & By.tagName(โ€œaโ€) Methode.

Die Methode findElements() gibt eine Liste von Web-Elementen mit dem Tag a zurรผck. Mithilfe einer for-each-Schleife wird auf jedes Element zugegriffen.

Holen Sie sich ALLE Links einer Webseite

Der folgende WebDriver-Code รผberprรผft jeden Link vom Mercury Auf der Homepage der Touren kรถnnen Sie feststellen, welche Touren bereits laufen und welche sich noch im Aufbau befinden.

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

Die Ausgabe sollte der unten angegebenen รคhneln.

  • Der Zugriff auf Bildlinks erfolgt รผber die Methoden By.cssSelector() und By.xpath().

Holen Sie sich ALLE Links einer Webseite

Fehlerbehebung

Im Einzelfall kรถnnte der erste vom Code aufgerufene Link der โ€žStartseiteโ€œ-Link sein. In diesem Fall zeigt die Aktion `driver.navigate.back()` eine leere Seite an, da als erstes ein Browser geรถffnet wird. Der Treiber kann in einem leeren Browser nicht alle anderen Links finden. Daher lรถst die IDE eine Ausnahme aus, und der restliche Code wird nicht ausgefรผhrt. Dies lรคsst sich einfach mit einer If-Schleife abfangen.

Hรคufig gestellte Fragen

Selenium sammelt alle Anker-Tags und sendet eine HTTP-HEAD-Anfrage an jeden dieser Tags. URLund kennzeichnet jeden Link, der einen Fehlercode von 400 oder hรถher zurรผckgibt, als defekt.

Ein 4xx-Code deutet auf ein clientseitiges Problem hin, z. B. eine fehlende Seite, wรคhrend ein 5xx-Code auf einen serverseitigen Fehler bei der Verarbeitung der Anfrage hinweist.

Ja. Bildquellen werden mit By.cssSelector() oder By.xpath() gesammelt, und dann wird jede Quelle einzeln verarbeitet. URL wird anhand des HTTP-Antwortcodes validiert.

Ja. KI-basierte Crawler scannen Seiten, folgen Links und kennzeichnen defekte oder weiterleitende Seiten. URLs ohne manuelle Skripterstellung.

Die KI รผberwacht den Zustand der Verbindungen im Laufe der Zeit, sagt Ausfรคlle voraus und schlรคgt Ersatzverbindungen vor, wodurch wiederholte manuelle Verbindungsprรผfungen reduziert werden.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: