Kako pronaći neispravne veze u Selenium

Što su prekinute veze?

Neispravne veze su veze ili URL-ovi koji nisu dostupni. Mogu biti nedostupni ili ne rade zbog neke pogreške poslužitelja

URL će uvijek imati status s 2xx koji je važeći. Postoje različiti HTTP statusni kodovi koji imaju različite svrhe. Za nevažeći zahtjev, HTTP status je 4xx i 5xx.

4xx klasa statusnih kodova uglavnom je za pogrešku na strani klijenta, a 5xx klasa statusnih kodova je uglavnom za pogrešku odgovora poslužitelja.

Najvjerojatnije nećemo moći potvrditi radi li ta veza ili ne dok je ne kliknemo i potvrdimo.

Zašto biste trebali provjeriti neispravne veze?

Uvijek biste trebali paziti da na stranici nema neispravnih poveznica jer korisnik ne bi trebao doći na stranicu s pogreškom.

Pogreška se događa ako se pravila ne ažuriraju ispravno ili traženi resursi ne postoje na poslužitelju.

Ručna provjera veza je dosadan zadatak, jer svaka web stranica može imati veliki broj poveznica i ručni postupak mora se ponoviti za sve stranice.

Skripta za automatizaciju koja koristi Selenium koji će automatizirati proces je prikladnije rješenje.

Kako provjeriti neispravne veze i slike Selenium

Za provjeru neispravnih veza morat ćete učiniti sljedeće korake.

  1. Prikupite sve veze na web stranici na temelju oznake.
  2. Pošaljite HTTP zahtjev za vezu i pročitajte HTTP kod odgovora.
  3. Na temelju HTTP koda odgovora saznajte je li veza važeća ili ne radi.
  4. Ponovite ovo za sve snimljene veze.

Kod za pronalaženje neispravnih veza na web stranici

Ispod je kod web upravljačkog programa koji testira naš slučaj upotrebe:

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

    }
}

Objašnjavajući kod neispravnih veza

Korak 1: Uvoz paketa

Uvezite donji paket uz zadane pakete:

import java.net.HttpURLConnection;

Koristeći metode u ovom paketu, možemo slati HTTP zahtjeve i uhvatiti HTTP kodove odgovora iz odgovora.

Korak 2: Prikupite sve veze na web stranici

Identificirajte sve veze na web stranici i pohranite ih na popis.

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

Nabavite Iterator za kretanje kroz popis.

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

Korak 3: Identificiranje i provjera URL-a

U ovom ćemo dijelu provjeriti pripada li URL domeni treće strane ili je URL prazan/nula.

Nabavite href oznake sidra i pohranite je u url varijablu.

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

Provjerite je li URL null ili Empty i preskočite preostale korake ako je uvjet zadovoljen.

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

Provjerite pripada li URL glavnoj domeni ili trećoj strani. Preskočite preostale korake ako pripada domeni treće strane.

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

Korak 4: Pošaljite http zahtjev

Klasa HttpURLConnection ima metode za slanje HTTP zahtjeva i hvatanje koda HTTP odgovora. Dakle, izlaz metode openConnection() (URLConnection) je tipa prebačen u HttpURLConnection.

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

Možemo postaviti vrstu zahtjeva kao "HEAD" umjesto "GET". Tako da se vraćaju samo zaglavlja, a ne tijelo dokumenta.

huc.setRequestMethod("HEAD");

Prilikom pozivanja metode connect() uspostavlja se stvarna veza s url-om i šalje se zahtjev.

huc.connect();

Korak 5: Provjera valjanosti veza

Korištenjem metode getResponseCode() možemo dobiti kod odgovora na zahtjev

respCode = huc.getResponseCode();

Na temelju koda odgovora pokušat ćemo provjeriti status veze.

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

Dakle, možemo dobiti sve poveznice s web stranice i ispisati jesu li poveznice važeće ili neispravne.

Nadamo se da će vam ovaj vodič pomoći u provjeri neispravnih veza pomoću selena.

Kako doći do SVE poveznice web stranice

Jedan od uobičajenih postupaka na webu Ispitivanje je testirati rade li sve veze unutar stranice. To se može jednostavno učiniti kombinacijom Java za-svaku petlju, pronađiElemente() & By.tagName("a") metoda.

Metoda findElements() vraća popis Web elemenata s oznakom a. Korištenjem for-each petlje pristupa se svakom elementu.

Dobijte SVE veze na web stranici

WebDriver kod u nastavku provjerava svaku vezu iz Mercury Obilasci početne stranice za određivanje onih koji rade i onih koji su još u izradi.

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

Izlaz bi trebao biti sličan dolje navedenom.

  • Pristup poveznicama na slike vrši se metodama By.cssSelector() i By.xpath().

Dobijte SVE veze na web stranici

Rješavanje problema

U izoliranom slučaju, prva poveznica kojoj pristupi kod mogla bi biti poveznica "Početna". U tom slučaju, akcija driver.navigate.back() prikazat će praznu stranicu jer je prva radnja otvaranje preglednika. Vozač neće moći pronaći sve druge veze u praznom pregledniku. Dakle, IDE će izbaciti iznimku i ostatak koda se neće izvršiti. To se može lako riješiti korištenjem If petlje.