Kuidas leida katkisi linke Selenium

Mis on katkised lingid?

Katkestatud lingid on lingid või URL-id, millele ei pääse ligi. Need võivad mõne serveri vea tõttu olla maas või mitte töötada

URL-il on alati kehtiv olek 2xx. On erinevaid HTTP olekukoode, millel on erinev eesmärk. Kehtetu päringu korral on HTTP olek 4xx ja 5xx.

Olekukoodide klass 4xx on mõeldud peamiselt kliendipoolse vea jaoks ja 5xx olekukoodide klass on mõeldud peamiselt serveri vastuse vea jaoks.

Tõenäoliselt ei saa me kinnitada, kas see link töötab või mitte, enne kui klõpsame sellel ja kinnitame.

Miks peaksite kontrollima Katkestatud linke?

Peaksite alati veenduma, et saidil ei oleks katkisi linke, sest kasutaja ei tohiks sattuda vealehele.

Viga ilmneb siis, kui reegleid ei värskendata õigesti või serveris pole nõutud ressursse.

Linkide käsitsi kontrollimine on tüütu ülesanne, kuna igal veebilehel võib olla palju linke ja käsitsi protsessi tuleb korrata kõigi lehtede puhul.

Kasutatav automatiseerimisskript Selenium mis automatiseerib protsessi, on sobivam lahendus.

Kuidas kontrollida katkiseid linke ja pilte Selenium

Katkeste linkide kontrollimiseks peate tegema järgmised toimingud.

  1. Koguge kõik veebilehel olevad lingid sildi alusel.
  2. Saatke lingi HTTP-päring ja lugege HTTP vastuse koodi.
  3. Uurige HTTP vastuse koodi põhjal, kas link on kehtiv või katki.
  4. Korrake seda kõigi jäädvustatud linkide puhul.

Kood veebilehe katkiste linkide leidmiseks

Allpool on veebidraiveri kood, mis testib meie kasutusjuhtu:

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

    }
}

Katkeste linkide koodi selgitamine

1. samm: importige paketid

Importige lisaks vaikepakettidele ka allolev pakett:

import java.net.HttpURLConnection;

Selle paketi meetodeid kasutades saame saata HTTP-päringuid ja jäädvustada vastusest HTTP vastuse koode.

2. samm: koguge veebilehele kõik lingid

Tuvastage kõik veebilehel olevad lingid ja salvestage need loendisse.

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

Hankige Iterator loendi läbimiseks.

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

3. samm: URL-i tuvastamine ja kinnitamine

Selles osas kontrollime, kas URL kuulub kolmanda osapoole domeenile või kas URL on tühi/null.

Hankige ankrumärgendi href ja salvestage see url-i muutujasse.

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

Kontrollige, kas URL on tühi või tühi, ja jätke ülejäänud sammud vahele, kui tingimus on täidetud.

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

Kontrollige, kas URL kuulub põhidomeenile või kolmandale osapoolele. Jätke ülejäänud sammud vahele, kui see kuulub kolmanda osapoole domeenile.

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

4. samm: saatke http-taotlus

Klassis HttpURLConnection on meetodid HTTP päringu saatmiseks ja HTTP vastuse koodi hõivamiseks. Niisiis, meetodi openConnection() väljund (URLConnection) kantakse üle HttpURLConnectioni.

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

Saame määrata päringu tüübiks "HEAD", mitte "GET". Nii et tagastatakse ainult päised, mitte dokumendi keha.

huc.setRequestMethod("HEAD");

Meetodi connect() käivitamisel luuakse tegelik ühendus URL-iga ja päring saadetakse.

huc.connect();

5. samm: linkide kinnitamine

Kasutades meetodit getResponseCode() saame päringu vastusekoodi

respCode = huc.getResponseCode();

Vastuskoodi põhjal proovime lingi olekut kontrollida.

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

Seega saame veebilehelt hankida kõik lingid ja printida, kas lingid on kehtivad või katkised.

Loodetavasti aitab see õpetus teil seleeni abil katkiste linkide kontrollimisel.

Kuidas hankida KÕIK veebilehe lingid

Üks levinumaid protseduure veebis Testimine on testida, kas kõik lehel olevad lingid töötavad. Seda saab mugavalt teha, kasutades nende kombinatsiooni Java iga silmuse jaoks, leia elemente () & Autor.tagName("a") meetod.

Meetod findElements() tagastab veebielementide loendi sildiga a. Igale elemendile pääseb juurde iga tsükli abil.

Hankige KÕIK veebilehe lingid

Allolev WebDriveri kood kontrollib kõiki saidi linke Mercury Ekskursioonide koduleht, et teha kindlaks need, mis töötavad ja mis on veel ehitamisel.

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

Väljund peaks olema sarnane allpool näidatud väljundiga.

  • Juurdepääs pildilinkidele toimub By.cssSelector() ja By.xpath() meetodite abil.

Hankige KÕIK veebilehe lingid

Tõrkeotsing

Üksikjuhtudel võib esimene link, millele kood juurde pääseb, olla link "Kodu". Sellisel juhul näitab toiming driver.navigate.back() tühja lehte, kuna esimene toiming avab brauseri. Juht ei leia tühjast brauserist kõiki teisi linke. Seega teeb IDE erandi ja ülejäänud koodi ei käivitata. Seda saab hõlpsasti käsitleda If-ahela abil.