Hogyan lehet megszakadt hivatkozásokat találni Selenium

Mik azok a megszakadt linkek?

A hibás hivatkozások olyan linkek vagy URL-ek, amelyek nem érhetők el. Előfordulhat, hogy nem működnek, vagy valamilyen szerverhiba miatt nem működnek

Az URL állapota mindig 2xx lesz, amely érvényes. Különböző HTTP-állapotkódok léteznek, amelyek különböző célokat szolgálnak. Érvénytelen kérés esetén a HTTP állapota 4xx és 5xx.

A 4xx osztályú állapotkód főként a kliens oldali hibára, az 5xx osztályú állapotkód pedig főleg a szerver válaszhibájára vonatkozik.

Valószínűleg nem tudjuk megerősíteni, hogy a link működik-e vagy sem, amíg rá nem kattintunk és megerősítjük.

Miért érdemes ellenőrizni a megszakadt linkeket?

Mindig ügyeljen arra, hogy ne legyenek hibás hivatkozások az oldalon, mert a felhasználónak nem szabad hibaoldalra kerülnie.

A hiba akkor fordul elő, ha a szabályok nem megfelelően frissülnek, vagy a kért erőforrások nem léteznek a kiszolgálón.

A linkek kézi ellenőrzése fárasztó feladat, mert minden weboldalon nagyszámú hivatkozás lehet, és a manuális folyamatot minden oldalon meg kell ismételni.

Egy automatizálási szkriptet használ Selenium amely automatizálja a folyamatot, megfelelőbb megoldás.

Hogyan lehet ellenőrizni a megszakadt hivatkozásokat és képeket Selenium

A hibás hivatkozások ellenőrzéséhez a következő lépéseket kell végrehajtania.

  1. Gyűjtsd össze az összes linket a weboldalon címke alapján.
  2. HTTP-kérelem küldése a hivatkozásra, és olvassa el a HTTP-válaszkódot.
  3. A HTTP-válaszkód alapján megtudhatja, hogy a hivatkozás érvényes-e vagy hibás-e.
  4. Ismételje meg ezt az összes rögzített hivatkozásra.

Kód a weboldal megszakadt hivatkozásainak megtalálásához

Az alábbiakban a web-illesztőprogram kódja található, amely teszteli a használati esetünket:

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

    }
}

A Broken Links kódjának magyarázata

1. lépés: Csomagok importálása

Importálja az alábbi csomagot az alapértelmezett csomagok mellett:

import java.net.HttpURLConnection;

A csomagban található metódusok segítségével HTTP kéréseket küldhetünk, és HTTP válaszkódokat rögzíthetünk a válaszból.

2. lépés: Gyűjtsd össze az összes hivatkozást a weboldalon

Azonosítsa az összes hivatkozást a weboldalon, és tárolja azokat a listában.

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

Szerezze be az Iteratort, hogy áthaladjon a listán.

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

3. lépés: Az URL azonosítása és ellenőrzése

Ebben a részben megvizsgáljuk, hogy az URL harmadik fél domainhez tartozik-e, vagy az URL üres/null.

Szerezze le a horgonycímke href-jét, és tárolja az url változóban.

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

Ellenőrizze, hogy az URL üres-e vagy üres, és hagyja ki a többi lépést, ha a feltétel teljesül.

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

Ellenőrizze, hogy az URL fő domainhez vagy harmadik félhez tartozik-e. Hagyja ki a többi lépést, ha harmadik fél domainjéhez tartozik.

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

4. lépés: http-kérés küldése

A HttpURLConnection osztálynak vannak metódusai a HTTP-kérés küldésére és a HTTP-válaszkód rögzítésére. Tehát az openConnection() metódus (URLConnection) kimenete a HttpURLConnection fájlba kerül.

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

Beállíthatjuk a kérés típusát a „HEAD” értékre a „GET” helyett. Így csak a fejlécek jelennek meg, és nem a dokumentumtörzs.

huc.setRequestMethod("HEAD");

A connect() metódus meghívásakor létrejön a tényleges kapcsolat az url-lel, és elküldésre kerül a kérés.

huc.connect();

5. lépés: Hivatkozások ellenőrzése

A getResponseCode() metódus segítségével válaszkódot kaphatunk a kéréshez

respCode = huc.getResponseCode();

A válaszkód alapján megpróbáljuk ellenőrizni a link állapotát.

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

Így az összes linket megkaphatjuk a weboldalról, és kinyomtathatjuk, hogy a linkek érvényesek vagy hibásak.

Remélhetőleg ez az oktatóanyag segít a megszakadt hivatkozások szelén használatával történő ellenőrzésében.

Hogyan szerezhető be egy weboldal ÖSSZES hivatkozása

A weben elterjedt eljárások egyike Tesztelés annak tesztelése, hogy az oldalon található összes hivatkozás működik-e. Ez kényelmesen megtehető a következők kombinációjával Java minden hurok számára, FindElements() & By.tagName("a") módszer.

A findElements() metódus az a címkével rendelkező webelemek listáját adja vissza. Egy for-each ciklus használatával minden elem elérhető.

Szerezze meg a weboldal ÖSSZES hivatkozását

Az alábbi WebDriver kód minden hivatkozást ellenőrzi a Mercury A Tours honlapja annak meghatározására, hogy melyek működnek és melyek még építés alatt állnak.

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

A kimenetnek hasonlónak kell lennie az alább jelzetthez.

  • A képhivatkozások elérése By.cssSelector() és By.xpath() metódusokkal történik.

Szerezze meg a weboldal ÖSSZES hivatkozását

Hibaelhárítás

Elszigetelt esetben a kód által elért első hivatkozás a „Home” hivatkozás lehet. Ebben az esetben a driver.navigate.back() művelet egy üres oldalt jelenít meg, mivel az első művelet a böngésző megnyitása. Az illesztőprogram nem fogja tudni megtalálni az összes többi hivatkozást egy üres böngészőben. Tehát az IDE kivételt dob, és a kód többi része nem fut le. Ez könnyen kezelhető egy If hurok segítségével.