Kuidas leida katkisi linke Selenium

⚡ Nutikas kokkuvõte

Katkiste linkide leidmine Selenium WebDriver hõlmab iga ankrusildi kogumist ja igale sildile HTTP HEAD-päringu saatmist URLja vastusekoodi lugemine. Lingid, mis tagastavad koodi 400 või rohkem, märgistatakse katkiseks, samas kui kehtivad lingid tagastavad koodi 2xx.

  • 🔗 Määratlus: Katkine link on URL millega ei ole võimalik ühendust saada, tagastades tavaliselt 4xx või 5xx vea.
  • 🧭 Miks see oluline: Katkised lingid kahjustavad kasutajakogemust ja SEO-d, seega asendavad aeglase käsitsi kinnitamise automatiseeritud kontrollid.
  • 📥 Koguge linke: Kasutage funktsiooni findElements koos funktsiooniga By.tagName(“a”), et koondada kõik lehel olevad ankruelemendid loendisse.
  • 📡 Saada HEAD-päring: Ava HTTP-protokollURLÜhendus, määrake meetodiks HEAD ja lugege vastusekood vastavalt URL.
  • ✅ Kinnita staatus: Käsitle vastusekoodi 400 või suuremat vigase lingina ja iga 2xx koodi toimiva lingina.

Kuidas leida katkisi linke Selenium

Mis on katkised lingid?

Katkised lingid on lingid või URLd, mis pole kättesaadavad. Need võivad serverivea tõttu maas olla või mitte töötada.

A URL on alati staatusega 2xx, mis on kehtiv. HTTP olekukoode on erinevaid, millel on erinevad eesmärgid. Kehtetu päringu korral on HTTP staatus 4xx ja 5xx.

Staatuskoodide klass 4xx on peamiselt kliendipoolse vea jaoks ja olekukoodide klass 5xx on 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 pole katkiseid 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, sest igal veebilehel võib olla suur hulk linke ja käsitsi protsessi tuleb kõigi lehtede puhul korrata.

Automatiseerimisskript, mis kasutab Selenium mis automatiseerib protsessi, on sobivam lahendus.

Kuidas kontrollida katkiseid linke ja pilte Selenium

Katkeste linkide kontrollimiseks peate tegema järgmised toimingud.

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

Code veebilehelt 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

Lisaks vaikepakettidele impordi 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

Tuvasta kõik veebilehel olevad lingid ja salvesta need loendisse.

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

Hankige iteraator loendi läbimiseks.

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

3. samm: tuvastamine ja valideerimine URL

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

Hankige ankrusildi href ja salvestage see URL-i muutujasse.

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

Kontrollige, kas URL on null 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õhidomeeni või kolmanda osapoole alla. Jätke ülejäänud sammud vahele, kui see kuulub kolmanda osapoole domeeni.

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

4. samm: saatke HTTP-päring

HTTPURLÜhendusklassil on meetodid HTTP-päringu saatmiseks ja HTTP-vastuse koodi jäädvustamiseks. Seega openConnection() meetodi väljund (URLÜhendus) on tüübiks muundatud HTTP-ksURLÜhendus

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

Me võime päringu tüübiks määrata „HEAD” „GET” asemel, nii et tagastatakse ainult päised, mitte dokumendi sisu.

huc.setRequestMethod("HEAD");

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

huc.connect();

5. samm: linkide kinnitamine

getResponse'i kasutamineCode() meetodi abil saame päringule vastusekoodi.

respCode = huc.getResponseCode();

Vastusekoodi 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 kõik lingid kätte ja printida, kas lingid on kehtivad või katki.

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 ligi for-each 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.

  • Pildilinkidele pääseb ligi meetodite By.cssSelector() ja By.xpath() abil.

Hankige KÕIK veebilehe lingid

Tõrkeotsing

Üksikjuhul võib koodi esimene link olla link „Avaleht“. Sellisel juhul kuvab toiming driver.navigate.back() tühja lehe, kuna esimene toiming on brauseri avamine. Draiver ei leia tühjast brauserist kõiki teisi linke. Seega viskab IDE erandi ja ülejäänud kood ei käivitu. Seda saab hõlpsalt lahendada If-tsükli abil.

KKK

Selenium kogub kõik ankrusildid, saadab igale HTTP HEAD-päringu URLja märgib kõik lingid, mis tagastavad väärtuse 400 või rohkem, katkiseks.

4xx kood näitab kliendipoolset probleemi, näiteks puuduvat lehte, samas kui 5xx kood näitab serveripoolset tõrget päringu töötlemisel.

Jah. Piltide allikad kogutakse By.cssSelector() või By.xpath() abil ja seejärel iga allikas URL valideeritakse HTTP vastusekoodi kaudu.

Jah. Tehisintellektil põhinevad robotid skannivad lehti, järgivad linke ja märgistavad katkised või ümbersuunavad lehed. URLs ilma käsitsi skriptimiseta.

Tehisintellekt jälgib linkide tervist aja jooksul, ennustab tõrkeid ja soovitab asendusi, vähendades korduvaid käsitsi linkide auditeid.

Võta see postitus kokku järgmiselt: