Sådan finder du ødelagte links i Selenium

Hvad er ødelagte links?

Ødelagte links er links eller URL'er, der ikke er tilgængelige. De kan være nede eller ikke fungere på grund af en serverfejl

En URL vil altid have en status med 2xx, som er gyldig. Der er forskellige HTTP-statuskoder, som har forskellige formål. For en ugyldig anmodning er HTTP-status 4xx og 5xx.

4xx-klassen af ​​statuskode er hovedsageligt til klientsidefejl, og 5xx-klassen af ​​statuskoder er hovedsageligt til serversvarsfejlen.

Vi vil højst sandsynligt ikke være i stand til at bekræfte, om det link virker eller ej, før vi klikker og bekræfter det.

Hvorfor skal du tjekke Ødelagte links?

Du bør altid sikre dig, at der ikke er brudte links på siden, fordi brugeren ikke skal lande på en fejlside.

Fejlen opstår, hvis reglerne ikke er opdateret korrekt, eller de anmodede ressourcer ikke findes på serveren.

Manuel kontrol af links er en kedelig opgave, fordi hver webside kan have et stort antal links og manuel proces skal gentages for alle sider.

Et automatiseringsscript ved hjælp af Selenium der vil automatisere processen er en mere passende løsning.

Sådan tjekker du de ødelagte links og billeder ind Selenium

For at kontrollere de ødelagte links skal du gøre følgendewing trin.

  1. Saml alle links på websiden baseret på tag.
  2. Send HTTP-anmodning om linket, og læs HTTP-svarkoden.
  3. Find ud af, om linket er gyldigt eller brudt baseret på HTTP-svarkode.
  4. Gentag dette for alle de fangede links.

Kode for at finde de ødelagte links på en webside

Nedenfor er webdriverkoden, som tester vores use case:

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();

    }
}

Forklaring af koden for Broken Links

Trin 1: Importer pakker

Importer nedenstående pakke ud over standardpakker:

import java.net.HttpURLConnection;

Ved at bruge metoderne i denne pakke kan vi sende HTTP-anmodninger og fange HTTP-svarkoder fra svaret.

Trin 2: Saml alle links på websiden

Identificer alle links på en webside og gem dem i Liste.

List<WebElement> links = driver.findElements(By.tagName("a"));

Få Iterator for at gå gennem listen.

Iterator<WebElement> it = links.iterator();

Trin 3: Identifikation og validering af URL

I denne del vil vi kontrollere, om URL tilhører tredjeparts domæne, eller om URL er tom/nul.

Hent href af ankertag og gem det i url-variabel.

url = it.next().getAttribute("href");

Tjek, om URL er null eller Tom, og spring de resterende trin over, hvis betingelsen er opfyldt.

if(url == null || url.isEmpty()){
              System.out.println("URL is either not configured for anchor tag or it is empty");
              continue;
     }

Tjek, om URL tilhører et hoveddomæne eller tredjepart. Spring de resterende trin over, hvis det tilhører tredjeparts domæne.

 if(!url.startsWith(homePage)){
           System.out.println("URL belongs to another domain, skipping it.");
           continue;
   }

Trin 4: Send http-anmodning

HttpURLConnection-klassen har metoder til at sende HTTP-anmodning og indfange HTTP-svarkode. Så output fra openConnection()-metoden (URLConnection) er typecastet til HttpURLConnection.

huc = (HttpURLConnection)(new URL(url).openConnection());

Vi kan indstille anmodningstype som "HEAD" i stedet for "GET". Så kun overskrifter returneres og ikke dokumenttekst.

huc.setRequestMethod("HEAD");

Ved påkaldelse af connect()-metoden etableres den faktiske forbindelse til url, og anmodningen sendes.

huc.connect();

Trin 5: Validering af links

Ved at bruge getResponseCode() metoden kan vi få svarkode for anmodningen

respCode = huc.getResponseCode();

Baseret på svarkode vil vi forsøge at kontrollere linkstatus.

if(respCode >= 400){
        System.out.println(url+" is a broken link");
}
else{
        System.out.println(url+" is a valid link");
}

Således kan vi hente alle links fra webside og udskrive, om links er gyldige eller ødelagte.

Håber denne tutorial hjælper dig med at kontrollere ødelagte links ved hjælp af selenium.

Sådan får du ALLE links til en webside

En af de almindelige procedurer i web Test er at teste om alle links på siden virker. Dette kan bekvemt gøres ved at bruge en kombination af Java for hver sløjfe, findElements() & By.tagName(“a”) fremgangsmåde.

FindElements()-metoden returnerer en liste over webelementer med tag a. Ved at bruge en for-hver-løkke tilgås hvert element.

Få ALLE links til en webside

WebDriver-koden nedenfor kontrollerer hvert link fra Mercury Tours-hjemmesiden for at afgøre, hvilke der fungerer, og dem der stadig er under opbygning.

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 = "http://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();			
    }		
}

Outputtet skal svare til det, der er angivet nedenfor.

  • Adgang til billedlinks udføres ved hjælp af metoderne By.cssSelector() og By.xpath().

Få ALLE links til en webside

Fejlfinding

I et isoleret tilfælde kunne det første link, som koden tilgås, være "Hjem"-linket. I sådanne tilfælde vil driver.navigate.back() handling vise en tom side, da den første handling åbner en browser. Driveren vil ikke kunne finde alle andre links i en tom browser. Så IDE vil kaste en undtagelse, og resten af ​​koden vil ikke køre. Dette kan nemt håndteres ved hjælp af en If-løkke.