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.

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.
- Sammle alle Links auf der Webseite anhand des Tags.
- Senden Sie eine HTTP-Anfrage für den Link und lesen Sie den HTTP-Antwortcode aus.
- Anhand des HTTP-Antwortcodes lässt sich feststellen, ob der Link gültig oder defekt ist.
- 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.
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().
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.


.png)