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: