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: