Cum să găsiți linkuri rupte în Selenium

Ce sunt link-urile sparte?

Link-urile întrerupte sunt link-uri sau adrese URL care nu sunt accesibile. Este posibil ca acestea să nu funcționeze sau să nu funcționeze din cauza unei erori de server

O adresă URL va avea întotdeauna o stare cu 2xx care este validă. Există diferite coduri de stare HTTP care au scopuri diferite. Pentru o solicitare nevalidă, starea HTTP este 4xx și 5xx.

Clasa 4xx de coduri de stare este în principal pentru eroarea din partea clientului, iar clasa 5xx de coduri de stare este în principal pentru eroarea de răspuns a serverului.

Cel mai probabil, nu vom putea confirma dacă acel link funcționează sau nu până când îl vom face clic și îl vom confirma.

De ce ar trebui să verificați linkurile întrerupte?

Ar trebui să vă asigurați întotdeauna că nu există link-uri întrerupte pe site, deoarece utilizatorul nu ar trebui să ajungă într-o pagină de eroare.

Eroarea apare dacă regulile nu sunt actualizate corect sau resursele solicitate nu există pe server.

Verificarea manuală a link-urilor este o sarcină obositoare, deoarece fiecare pagină web poate avea un număr mare de link-uri și procesul manual trebuie repetat pentru toate paginile.

Un script de automatizare folosind Selenium care va automatiza procesul este o soluție mai potrivită.

Cum să verificați linkurile și imaginile sparte în Selenium

Pentru a verifica legăturile rupte, va trebui să parcurgeți următorii pași.

  1. Colectați toate linkurile din pagina web pe baza etichetei.
  2. Trimiteți cererea HTTP pentru link și citiți codul de răspuns HTTP.
  3. Aflați dacă legătura este validă sau întreruptă pe baza codului de răspuns HTTP.
  4. Repetați acest lucru pentru toate linkurile capturate.

Cod pentru a găsi linkurile întrerupte pe o pagină web

Mai jos este codul driverului web care testează cazul nostru de utilizare:

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

    }
}

Explicarea codului de legături sparte

Pasul 1: importați pachete

Importați pachetul de mai jos pe lângă pachetele implicite:

import java.net.HttpURLConnection;

Folosind metodele din acest pachet, putem trimite cereri HTTP și captura coduri de răspuns HTTP din răspuns.

Pasul 2: Colectați toate linkurile din pagina web

Identificați toate linkurile dintr-o pagină web și stocați-le în Listă.

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

Obțineți Iterator pentru a parcurge Lista.

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

Pasul 3: Identificarea și validarea adresei URL

În această parte, vom verifica dacă URL-ul aparține unui domeniu terță parte sau dacă URL-ul este gol/nul.

Obțineți href de etichetă de ancorare și stocați-o în variabila URL.

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

Verificați dacă adresa URL este nulă sau goală și omiteți pașii rămași dacă condiția este îndeplinită.

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

Verificați dacă adresa URL aparține unui domeniu principal sau unei terțe părți. Sari peste pașii rămași dacă aparține unui domeniu terță parte.

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

Pasul 4: Trimiteți cererea http

Clasa HttpURLConnection are metode pentru a trimite cererea HTTP și pentru a captura codul de răspuns HTTP. Deci, ieșirea metodei openConnection() (URLConnection) este turnată în HttpURLConnection.

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

Putem seta tipul de solicitare ca „HEAD” în loc de „GET”. Astfel încât să fie returnate numai anteturile și nu corpul documentului.

huc.setRequestMethod("HEAD");

La invocarea metodei connect(), conexiunea reală la adresa URL este stabilită și cererea este trimisă.

huc.connect();

Pasul 5: Validarea linkurilor

Folosind metoda getResponseCode() putem obține codul de răspuns pentru cerere

respCode = huc.getResponseCode();

Pe baza codului de răspuns, vom încerca să verificăm starea linkului.

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

Astfel, putem obține toate linkurile de pe pagina web și putem imprima dacă link-urile sunt valide sau întrerupte.

Sper că acest tutorial vă ajută să verificați linkurile întrerupte folosind seleniu.

Cum să obțineți TOATE linkurile unei pagini web

Una dintre procedurile comune în web Testarea este de a testa dacă toate linkurile prezente în pagină funcționează. Acest lucru se poate face convenabil folosind o combinație a Java pentru-fiecare buclă, findElements() & By.tagName(„a”) metodă.

Metoda findElements() returnează o listă de Elemente Web cu eticheta a. Folosind o buclă for-each, fiecare element este accesat.

Obțineți TOATE linkurile unei pagini web

Codul WebDriver de mai jos verifică fiecare link de la Mercury Pagina de pornire a tururilor pentru a determina pe cei care funcționează și pe cei care sunt încă în construcție.

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

Ieșirea ar trebui să fie similară cu cea indicată mai jos.

  • Accesarea legăturilor de imagini se face folosind metodele By.cssSelector() și By.xpath().

Obțineți TOATE linkurile unei pagini web

Depanare

Într-un caz izolat, primul link accesat de cod ar putea fi Linkul „Acasă”. În acest caz, acțiunea driver.navigate.back() va afișa o pagină goală, deoarece prima acțiune este deschiderea unui browser. Driverul nu va putea găsi toate celelalte link-uri într-un browser gol. Deci IDE va ​​arunca o excepție și restul codului nu se va executa. Acest lucru poate fi gestionat cu ușurință folosind o buclă If.