Hur man hittar trasiga länkar i Selenium
Vad är trasiga länkar?
Trasiga länkar är länkar eller webbadresser som inte går att nå. De kan vara nere eller inte fungera på grund av något serverfel
En URL kommer alltid att ha en status med 2xx vilket är giltigt. 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 huvudsakligen för fel på klientsidan och 5xx klass av statuskoder är huvudsakligen för serversvarsfel.
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 kolla Brutna länkar?
Du bör alltid se till att det inte finns några trasiga länkar på sajten eftersom användaren inte ska landa 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 som använder Selenium som kommer att automatisera processen är en mer lämplig lösning.
Så här kontrollerar du brutna länkar och bilder Selenium
För att kontrollera de trasiga länkarna måste du göra följande steg.
- Samla alla länkar på webbsidan baserat på tagg.
- Skicka HTTP-förfrågan för länken och läs HTTP-svarskoden.
- Ta reda på om länken är giltig eller trasig baserat på HTTP-svarskod.
- Upprepa detta för alla länkar som tagits.
Kod för att hitta de trasiga länkarna på en webbsida
Nedan finns webbdrivrutinskoden som testar vårt användningsfall:
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();
}
}
Förklara koden för brutna länkar
Steg 1: Importera paket
Importera nedanstående paket utöver standardpaket:
import java.net.HttpURLConnection;
Med metoderna i det här paketet kan vi skicka HTTP-förfrågningar och fånga HTTP-svarskoder från svaret.
Steg 2: Samla alla länkar på webbsidan
Identifiera alla länkar på en webbsida och lagra dem i Lista.
List<WebElement> links = driver.findElements(By.tagName("a"));
Skaffa Iterator för att gå igenom listan.
Iterator<WebElement> it = links.iterator();
Steg 3: Identifiera och validera URL
I den här delen kommer vi att kontrollera om URL tillhör en tredjepartsdomän eller om URL är tom/null.
Hämta href av ankartaggen och lagra den i url-variabel.
url = it.next().getAttribute("href");
Kontrollera om URL är null eller Tom och hoppa över de återstående stegen om villkoret är uppfyllt.
if(url == null || url.isEmpty()){
System.out.println("URL is either not configured for anchor tag or it is empty");
continue;
}
Kontrollera om URL tillhör en huvuddomän eller tredje part. Hoppa över de återstående stegen om den tillhör tredje parts domän.
if(!url.startsWith(homePage)){
System.out.println("URL belongs to another domain, skipping it.");
continue;
}
Steg 4: Skicka http-förfrågan
Klassen HttpURLConnection har metoder för att skicka HTTP-begäran och fånga HTTP-svarskod. Så, utdata från metoden openConnection() (URLConnection) typcastas till HttpURLConnection.
huc = (HttpURLConnection)(new URL(url).openConnection());
Vi kan ställa in Request type som "HEAD" istället för "GET". Så att endast rubriker returneras och inte dokumentets brödtext.
huc.setRequestMethod("HEAD");
När connect()-metoden anropas upprättas den faktiska anslutningen till url och begäran skickas.
huc.connect();
Steg 5: Validera länkar
Genom att använda metoden getResponseCode() kan vi få svarskod för begäran
respCode = huc.getResponseCode();
Baserat på svarskoden kommer vi att försöka kontrollera länkstatus.
if(respCode >= 400){
System.out.println(url+" is a broken link");
}
else{
System.out.println(url+" is a valid link");
}
Således kan vi hämta alla länkar från webbsidan och skriva ut om länkarna är giltiga eller trasiga.
Hoppas den här handledningen hjälper dig att kontrollera trasiga länkar med selen.
Hur man får ALLA länkar till en webbsida
En av de vanliga procedurerna i webben Testning är att testa om alla länkar som finns på sidan fungerar. Detta kan bekvämt göras med en kombination av Java för varje slinga, findElements() & By.tagName(”a”) metod.
Metoden findElements() returnerar en lista med webbelement med taggen a. Genom att använda en för varje slinga nås 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.
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();
}
}
Utgången bör vara liknande den som anges nedan.
- Åtkomst till bildlänkar görs med metoderna By.cssSelector() och By.xpath().
Felsökning
I ett isolerat fall kan den första länken som nås av koden vara "Hem"-länken. I sådana fall kommer åtgärden driver.navigate.back() att visa en tom sida eftersom den första åtgärden öppnar en webbläsare. Föraren kommer inte att kunna hitta alla andra länkar i en tom webbläsare. Så IDE kommer att skapa ett undantag och resten av koden kommer inte att köras. Detta kan enkelt hanteras med hjälp av en If-slinga.


.png)