Hogyan lehet megszakadt hivatkozásokat találni Selenium

⚡ Okos összefoglaló

Hibás linkek keresése Selenium A WebDriver magában foglalja az összes anchor tag összegyűjtését, és HTTP HEAD kérés küldését mindegyikhez. URL, és a válaszkód beolvasása. A 400-as vagy annál nagyobb értéket visszaadó linkeket hibásként jelöli meg a rendszer, míg az érvényes linkek 2xx kódot adnak vissza.

  • 🔗 Meghatározás: A törött link egy URL amely nem érhető el, általában 4xx vagy 5xx hibát ad vissza.
  • 🧭 Miért számít: A hibás linkek károsak a felhasználói élményre és a keresőoptimalizálásra (SEO), ezért az automatikus ellenőrzések felváltják a lassú manuális ellenőrzést.
  • 📥 Linkek gyűjtése: Használd a findElements függvénnyel a By.tagName(„a”) függvénnyel együtt, hogy az oldalon található összes horgonyelemet egy listába gyűjtsd.
  • 📡 HEAD kérés küldése: Nyisson meg egy Http-tURLKapcsolat, állítsd a metódust HEAD-re, és olvasd be a válaszkódot URL.
  • Állapot ellenőrzése: A 400-as vagy annál nagyobb válaszkódot hibásnak, a 2xx kódot pedig működő hivatkozásnak kell tekinteni.

Hogyan lehet megszakadt hivatkozásokat találni Selenium

Mik azok a megszakadt linkek?

A hibás linkek linkek, ill. URLamelyek nem érhetők el. Lehetséges, hogy valamilyen szerverhiba miatt nem működnek vagy nem működnek.

A URL mindig 2xx állapottal fog rendelkezni, ami érvényes. Különböző HTTP állapotkódok léteznek, amelyeknek különböző céljaik vannak. Érvénytelen kérés esetén a HTTP állapot 4xx és 5xx.

A 4xx osztályú állapotkódok főként a kliensoldali hibákra, míg az 5xx osztályú állapotkódok főként a szerver válaszhibáira vonatkoznak.

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 ügyelj arra, hogy ne legyenek hibás linkek 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 manuális ellenőrzése fáradságos feladat, mivel minden weboldalon nagyszámú link lehet, és a manuális folyamatot minden oldal esetében meg kell ismételni.

Egy automatizálási szkript, amely a következőt használja: 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 a címke alapján.
  2. Küldj egy HTTP kérést a hivatkozásra, és olvasd be a HTTP válaszkódot.
  3. A HTTP válaszkód alapján állapítsd meg, hogy a hivatkozás érvényes vagy hibás-e.
  4. Ismételje meg ezt az összes rögzített hivatkozásra.

Code Hibás linkek keresése egy weboldalon

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 egy weboldalon, és tárolja őket egy listában.

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

Szerezz be egy iterátort a lista végigjárásához.

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

3. lépés: Azonosítás és validálás URL

Ebben a részben azt vizsgáljuk meg, hogy a URL harmadik fél domainjéhez tartozik, vagy a URL üres/null.

Szerezd meg a horgonycímke href-jét, és tárold el az url változóban.

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

Ellenőrizze, hogy a URL null vagy üres, és ha a feltétel teljesül, hagyja ki a fennmaradó lépéseket.

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

Ellenőrizze, hogy a URL fő domainhez vagy harmadik félhez tartozik. Ha harmadik fél domainjéhez tartozik, hagyja ki a fennmaradó lépéseket.

 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 httpURLA Connection osztály metódusai HTTP kérések küldésére és a HTTP válaszkód rögzítésére szolgálnak. Tehát az openConnection() metódus kimenete (URLA kapcsolat) típusa HTTP-re konvertálva vanURLKapcsolat.

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

A kérés típusát a „GET” helyett „HEAD”-re állíthatjuk, így csak a fejlécek kerülnek visszaadásra, a dokumentum törzse nem.

huc.setRequestMethod("HEAD");

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

huc.connect();

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

A getResponse használataCode() metódussal megkaphatjuk a kérésre adott válaszkódot.

respCode = huc.getResponseCode();

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

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

Így egy weboldalról származó összes hivatkozást beolvashatjuk, és kinyomtathatjuk, hogy a hivatkozások érvényesek vagy hibásak.

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 a webelemek egy listáját adja vissza, amelyek tartalmazzák az „a” címkét. Egy for-each ciklus segítségével minden elemhez hozzáférünk.

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 a By.cssSelector() és a By.xpath() metódusokkal történik.

Szerezze meg a weboldal ÖSSZES hivatkozását

Hibaelhárítás

Egy elszigetelt esetben a kód által elért első hivatkozás lehet a „Kezdőlap” hivatkozás. Ilyen esetben a driver.navigate.back() művelet egy üres oldalt jelenít meg, mivel az első művelet egy böngésző megnyitása. A driver nem fogja megtalálni az összes többi hivatkozást egy üres böngészőben. Így az IDE kivételt dob, és a kód többi része nem fog végrehajtódni. Ez könnyen kezelhető egy If ciklussal.

GYIK

Selenium összegyűjti az összes horgonycímkét, és mindegyikhez HTTP HEAD kérést küld URL, és minden 400-as vagy annál nagyobb értéket visszaadó linket hibásként jelöl.

A 4xx kód kliensoldali problémát, például hiányzó oldalt jelez, míg az 5xx kód szerveroldali hibát jelez a kérés feldolgozása során.

Igen. A képforrásokat a By.cssSelector() vagy a By.xpath() függvénnyel gyűjtjük össze, majd minden forrást URL a HTTP válaszkódján keresztül érvényesül.

Igen. A mesterséges intelligencián alapuló robotok átvizsgálják az oldalakat, követik a linkeket, és jelzik a hibás vagy átirányító oldalakat. URLmanuális szkriptelés nélkül.

A mesterséges intelligencia idővel figyeli a linkek állapotát, előrejelzi a hibákat, és cseréket javasol, csökkentve ezzel az ismételt manuális linkellenőrzések szükségességét.

Foglald össze ezt a bejegyzést a következőképpen: