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)