Hoe u gebroken links kunt vinden Selenium

Wat zijn gebroken links?

Verbroken links zijn links of URL's die niet bereikbaar zijn. Het kan zijn dat ze offline zijn of niet functioneren vanwege een serverfout

Een URL heeft altijd de status 2xx en is geldig. Er zijn verschillende HTTP-statuscodes die verschillende doeleinden hebben. Voor een ongeldig verzoek is de HTTP-status 4xx en 5xx.

4xx-klasse statuscodes is voornamelijk bedoeld voor fouten aan de clientzijde, en 5xx-klasse statuscodes is voornamelijk bedoeld voor serverreactiefouten.

We kunnen hoogstwaarschijnlijk niet bevestigen of de link werkt of niet totdat we erop klikken en deze bevestigen.

Waarom zou u Gebroken links controleren?

U moet er altijd voor zorgen dat er geen verbroken links op de site staan, omdat de gebruiker niet op een foutpagina terechtkomt.

De fout treedt op als de regels niet correct zijn bijgewerkt of als de gevraagde bronnen niet op de server aanwezig zijn.

Het handmatig controleren van links is een vervelende taak, omdat elke webpagina een groot aantal links kan hebben en het handmatige proces voor alle pagina's moet worden herhaald.

Een automatiseringsscript dat gebruikmaakt van Selenium dat het proces automatiseert, is een geschiktere oplossing.

Hoe u de verbroken links en afbeeldingen kunt controleren Selenium

Om te controleren of er sprake is van kapotte links, moet u de volgende stappen volgen.

  1. Verzamel alle links op de webpagina op basis van tag.
  2. Verzend een HTTP-verzoek voor de link en lees de HTTP-antwoordcode.
  3. Ontdek of de link geldig of verbroken is op basis van de HTTP-antwoordcode.
  4. Herhaal dit voor alle vastgelegde links.

Code om de verbroken links op een webpagina te vinden

Hieronder vindt u de webdrivercode die onze use case test:

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

    }
}

Uitleg van de code van Broken Links

Stap 1: Pakketten importeren

Importeer onderstaand pakket naast de standaardpakketten:

import java.net.HttpURLConnection;

Met behulp van de methoden in dit pakket kunnen we HTTP-verzoeken verzenden en HTTP-antwoordcodes uit het antwoord vastleggen.

Stap 2: Verzamel alle links op de webpagina

Identificeer alle links op een webpagina en sla ze op in Lijst.

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

Verkrijg Iterator om door de lijst te bladeren.

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

Stap 3: URL identificeren en valideren

In dit deel zullen we controleren of de URL tot het domein van derden behoort of dat de URL leeg/null is.

Haal de href van de ankertag op en sla deze op in de URL-variabele.

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

Controleer of de URL nul of leeg is en sla de resterende stappen over als aan de voorwaarde is voldaan.

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

Controleer of de URL bij een hoofddomein of bij een derde partij hoort. Sla de resterende stappen over als het tot een domein van een derde partij behoort.

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

Stap 4: Verzend een http-verzoek

De klasse HttpURLConnection beschikt over methoden om een ​​HTTP-verzoek te verzenden en een HTTP-antwoordcode vast te leggen. De uitvoer van de openConnection()-methode (URLConnection) wordt dus getypeerd naar HttpURLConnection.

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

We kunnen het verzoektype instellen als “HEAD” in plaats van “GET”. Zodat alleen kopteksten worden geretourneerd en niet de hoofdtekst van het document.

huc.setRequestMethod("HEAD");

Bij het aanroepen van de connect()-methode wordt de daadwerkelijke verbinding met de URL tot stand gebracht en wordt het verzoek verzonden.

huc.connect();

Stap 5: Koppelingen valideren

Met de methode getResponseCode() kunnen we responscode voor het verzoek verkrijgen

respCode = huc.getResponseCode();

Op basis van de responscode proberen we de linkstatus te controleren.

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

Zo kunnen we alle links van de webpagina verkrijgen en afdrukken of de links geldig of verbroken zijn.

Ik hoop dat deze tutorial je helpt bij het controleren van kapotte links met behulp van Selenium.

Hoe u ALLE links van een webpagina kunt krijgen

Een van de gebruikelijke procedures in web Testen is om te testen of alle aanwezige links op de pagina werken. Dit kan gemakkelijk worden gedaan met behulp van een combinatie van de Java voor elke lus, vindElementen() & By.tagName(“a”) methode.

De methode findElements() retourneert een lijst met webelementen met tag a. Met behulp van een for-each-lus wordt elk element benaderd.

Ontvang ALLE links van een webpagina

De onderstaande WebDriver-code controleert elke link van het Mercury Bezoek de startpagina om te bepalen welke werken en welke nog in aanbouw zijn.

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

De uitvoer moet vergelijkbaar zijn met de hieronder aangegeven uitvoer.

  • Toegang tot afbeeldingslinks gebeurt met behulp van de methoden By.cssSelector() en By.xpath().

Ontvang ALLE links van een webpagina

Probleemoplossen

In een geïsoleerd geval kan de eerste link waartoe de code toegang geeft de “Home”-link zijn. In dat geval zal de actie driver.navigate.back() een lege pagina weergeven terwijl de eerste actie een browser opent. De bestuurder kan niet alle andere links in een lege browser vinden. Dus IDE zal een uitzondering genereren en de rest van de code zal niet worden uitgevoerd. Dit kan eenvoudig worden afgehandeld met behulp van een If-lus.