Vad är trasiga länkar?
Trasiga länkar är länkar eller webbadresser som inte kan nås. De kan vara nere eller inte fungerar på grund av något serverfel
En URL har alltid en status med 2xx som är giltig. Det finns olika HTTP-statuskoder som har olika syften. För en ogiltig begäran är HTTP-status 4xx och 5xx.
4xx-klass av statuskod är främst för klientsidafel och 5xx-klass av statuskoder är huvudsakligen för serverns svarsfel.
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 kontrollera Trasiga 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 tråkig uppgift, eftersom varje webbsida kan ha ett stort antal länkar och manuell process måste upprepas för alla sidor.
Ett automatiseringsskript med Selen som automatiserar processen är en mer lämplig lösning.
Så här kontrollerar du Trasiga länkar och bilder
För att kontrollera de trasiga länkarna måste du göra följande steg.
- Samla alla länkar på webbsidan baserat på taggen.
- Skicka HTTP-begäran för länken och läs HTTP-svarskod.
- Ta reda på om länken är giltig eller trasig baserat på HTTP-svarskod.
- Upprepa detta för alla fångade länkar.
Kod för att hitta de trasiga länkarna på en webbsida
Nedan följer webbdrivrutinkoden som testar vårt användningsfall:
paketautomatiseringPraktik;importera java.io.IOException;importera java.net.HttpURLConnection;importera java.net.MalformedURLException;importera java.net.URL;importera java.util.Iterator;importera java.util.List;importera org.openqa.selenium.By;importera org.openqa.selenium.WebDriver;importera org.openqa.selenium.WebElement;importera org.openqa.selenium.chrome.ChromeDriver;offentlig klass BrokenLinks {privat statisk WebDriver-drivrutin = null;public static void main (String [] args) {// TODO Auto-genererad metodstubString homePage = "http://www.zlti.com";String url = "";HttpURLConnection huc = null;int respCode = 200;drivrutin = ny ChromeDriver ();driver.manage (). fönster (). maximera ();driver.get (homePage);Listalänkar = driver.findElements (By.tagName ("a"));Iterator it = links.iterator ();medan (it.hasNext ()) {url = it.next (). getAttribute ("href");System.out.println (url);om (url == null || url.isEmpty ()) {System.out.println ("URL är antingen inte konfigurerad för ankartagg eller så är den tom");Fortsätta;}om (! url.startsWith (homePage)) {System.out.println ("URL tillhör en annan domän, hoppar över den.");Fortsätta;}Prova {huc = (HttpURLConnection) (ny URL (url). openConnection ());huc.setRequestMethod ("HEAD");huc.connect ();respCode = huc.getResponseCode ();om (respCode> = 400) {System.out.println (url + "är en trasig länk");}annan{System.out.println (url + "är en giltig länk");}} fånga (MalformedURLException e) {// TODO Auto-genererad fångstblocke.printStackTrace ();} fånga (IOException e) {// TODO Auto-genererad fångstblocke.printStackTrace ();}}driver.quit ();}}
Förklara koden Exempel
Steg 1: Importera paket
Importera under paketet utöver standardpaket:
importera java.net.HttpURLConnection;
Med hjälp av metoderna i detta paket kan vi skicka HTTP-förfrågningar och fånga HTTP-svarkoder från svaret.
Steg 2: Samla alla länkar på webbsidan
Identifiera alla länkar på en webbsida och lagra dem i Lista.
Listalänkar = driver.findElements (By.tagName ("a"));
Skaffa Iterator för att korsa listan.
Iteratorit = links.iterator ();
Steg 3: Identifiera och verifiera URL
I den här delen kommer vi att kontrollera om URL tillhör tredje parts domän eller om URL är tom / null.
Hämta href av ankartaggen och lagra den i webbadressvariabeln.
url = it.next (). getAttribute ("href");
Kontrollera om URL är null eller tom och hoppa över de återstående stegen om villkoret är uppfyllt.
om (url == null || url.isEmpty ()) {System.out.println ("URL är antingen inte konfigurerad för ankartagg eller så är den tom");Fortsätta;}
Kontrollera om URL tillhör en huvuddomän eller tredje part. Hoppa över de återstående stegen om den tillhör tredjepartsdomän.
om (! url.startsWith (homePage)) {System.out.println ("URL tillhör en annan domän, hoppar över den.");Fortsätta;}
Steg 4: Skicka http-begäran
HttpURLConnection-klassen har metoder för att skicka HTTP-begäran och fånga HTTP-svarskod. Så utdata från openConnection () -metoden (URLConnection) typgjutas till HttpURLConnection.
huc = (HttpURLConnection) (ny URL (url). openConnection ());
Vi kan ställa in begäran som "HEAD" istället för "GET". Så att endast rubriker returneras och inte dokumentet.
huc.setRequestMethod ("HEAD");
När man anropar connect () -metoden upprättas faktisk anslutning till url och begäran skickas.
huc.connect ();
Steg 5: Validera länkar
Med hjälp av getResponseCode () -metoden kan vi få svarskod för begäran
respCode = huc.getResponseCode ();
Baserat på svarkoden försöker vi kontrollera länkstatus.
om (respCode> = 400) {System.out.println (url + "är en trasig länk");}annan{System.out.println (url + "är en giltig länk");}
Således kan vi hämta alla länkar från webbsidan och skriva ut om länkar är giltiga eller brutna.
Hoppas att den här guiden hjälper dig att kontrollera trasiga länkar med selen.
Hur får jag ALLA länkar till en webbsida
En av de vanligaste procedurerna vid webbtestning är att testa om alla länkar som finns på sidan fungerar. Detta kan enkelt göras med en kombination av Java för varje loop , findElements () & By.tagName ("a") -metoden.
Metoden findElements () returnerar en lista över webbelement med tagg a. Med hjälp av en slinga för varje åtkomst till varje element.
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.
importera org.openqa.selenium.By;importera org.openqa.selenium.WebDriver;importera org.openqa.selenium.chrome.ChromeDriver;importera java.util.List;importera java.util.concurrent.TimeUnit;importera org.openqa.selenium. *;allmän klass P1 {public static void main (String [] args) {String baseUrl = "http://demo.guru99.com/test/newtours/";System.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");WebDriver-drivrutin = ny ChromeDriver ();String underConsTitle = "Under uppbyggnad: Mercury Tours";driver.manage (). timeouts (). implicitlyWait (5, TimeUnit.SECONDS);driver.get (baseUrl);ListalinkElements = driver.findElements (By.tagName ("a"));Sträng [] linkTexts = ny Sträng [linkElements.size ()];int i = 0;// extrahera länktexterna för varje länkelementför (WebElement e: linkElements) {linkTexts [i] = e.getText ();i ++;}// testa varje länkför (String t: linkTexts) {driver.findElement (By.linkText (t)). klicka ();om (driver.getTitle (). är lika med (underConsTitle)) {System.out.println ("\" "+ t +" \ ""+ "är under uppbyggnad.");} annat {System.out.println ("\" "+ t +" \ ""+ "fungerar.");}driver.navigate (). tillbaka ();}driver.quit ();}}
Utgången ska likna den som anges nedan.
Felsökning
I ett isolerat fall kan den första länken som koden nås vara "Hem" -länken. I sådant fall visar åtgärden driver.navigate.back () en tom sida när den första åtgärden öppnar en webbläsare. Drivrutinen kommer inte att kunna hitta alla andra länkar i en tom webbläsare. Så IDE kommer att kasta ett undantag och resten av koden kommer inte att köras. Detta kan enkelt hanteras med en If-loop.