Kuinka löytää rikkinäisiä linkkejä Selenium

⚡ Älykäs yhteenveto

Rikkoutuneiden linkkien löytäminen Selenium WebDriver kerää jokaisen ankkuritunnisteen ja lähettää HTTP HEAD -pyynnön jokaiselle tunnisteelle. URLja lukemalla vastauskoodin. Linkit, jotka palauttavat 400 tai suuremman arvon, merkitään rikkinäisiksi, kun taas kelvolliset linkit palauttavat 2xx-koodin.

  • 🔗 Määritelmä: Rikkoutunut linkki on URL johon ei voida päästä, mikä yleensä palauttaa 4xx- tai 5xx-virheen.
  • 🧭 Miksi sillä on merkitystä: Rikkoutuneet linkit heikentävät käyttökokemusta ja hakukoneoptimointia, joten automaattiset tarkistukset korvaavat hitaan manuaalisen vahvistuksen.
  • 📥 Kerää linkkejä: Käytä findElements-funktiota ja By.tagName(“a”)-funktiota kerätäksesi kaikki sivun ankkurielementit listaksi.
  • 📡 Lähetä HEAD-pyyntö: Avaa Http-osoiteURLYhteys, aseta metodiksi HEAD ja lue vastauskoodi URL.
  • Vahvista tila: Käsittele vastauskoodia 400 tai suurempaa rikkinäisenä ja mitä tahansa 2xx-koodia toimivana linkkinä.

Kuinka löytää rikkinäisiä linkkejä Selenium

Mitä ovat rikki linkit?

Rikkoutuneet linkit ovat linkkejä tai URLjoihin ei saada yhteyttä. Ne saattavat olla alhaalla tai eivät toimi palvelinvirheen vuoksi.

A URL on aina tilana 2xx, joka tarkoittaa kelvollisuutta. HTTP-tilakoodeja on erilaisia, ja niillä on eri tarkoitukset. Virheellisen pyynnön HTTP-tila on 4xx ja 5xx.

Tilakoodien 4xx-luokka on pääasiassa asiakaspuolen virheille ja 5xx-luokka pääasiassa palvelimen vastausvirheille.

Emme todennäköisesti pysty varmistamaan, toimiiko linkki vai ei, ennen kuin napsautamme ja vahvistamme sen.

Miksi rikkinäiset linkit kannattaa tarkistaa?

Sinun tulisi aina varmistaa, ettei sivustolla ole rikkinäisiä linkkejä, koska käyttäjän ei pitäisi päätyä virhesivulle.

Virhe tapahtuu, jos sääntöjä ei päivitetä oikein tai pyydettyjä resursseja ei ole palvelimella.

Linkkien manuaalinen tarkistaminen on työläs tehtävä, koska jokaisella verkkosivulla voi olla suuri määrä linkkejä ja manuaalinen prosessi on toistettava kaikille sivuille.

Automaatioskripti, joka käyttää Selenium joka automatisoi prosessin, on sopivampi ratkaisu.

Kuinka tarkistaa rikkinäiset linkit ja kuvat Selenium

Jos haluat tarkistaa rikkinäiset linkit, sinun on suoritettava seuraavat vaiheet.

  1. Kerää kaikki verkkosivun linkit tunnisteen perusteella .
  2. Lähetä linkkiä koskeva HTTP-pyyntö ja lue HTTP-vastauskoodi.
  3. Selvitä HTTP-vastauskoodin perusteella, onko linkki kelvollinen vai rikki.
  4. Toista tämä kaikille kaapatuille linkeille.

Code Etsi verkkosivulta rikkinäiset linkit

Alla on verkko-ohjainkoodi, joka testaa käyttötapaustamme:

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

    }
}

Broken Links -koodin selittäminen

Vaihe 1: Tuo paketit

Tuo alla oleva paketti oletuspakettien lisäksi:

import java.net.HttpURLConnection;

Tämän paketin menetelmiä käyttämällä voimme lähettää HTTP-pyyntöjä ja siepata HTTP-vastauskoodeja vastauksesta.

Vaihe 2: Kerää kaikki linkit verkkosivulle

Tunnistaa kaikki verkkosivun linkit ja tallentaa ne listaan.

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

Hanki iteraattori listan läpikäymiseksi.

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

Vaihe 3: Tunnistaminen ja validointi URL

Tässä osiossa tarkistamme, onko URL kuuluuko se kolmannen osapuolen verkkotunnukseen vai URL on tyhjä/nolla.

Hae ankkuritagin href ja tallenna se url-muuttujaan.

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

Tarkista, onko URL on null tai tyhjä ja ohita jäljellä olevat vaiheet, jos ehto täyttyy.

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

Tarkista, että URL kuuluu pääverkkotunnukseen tai kolmanteen osapuoleen. Ohita jäljellä olevat vaiheet, jos se kuuluu kolmannen osapuolen verkkotunnukseen.

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

Vaihe 4: Lähetä HTTP-pyyntö

HttpURLYhteysluokalla on metodeja HTTP-pyynnön lähettämiseen ja HTTP-vastauskoodin sieppaamiseen. Joten openConnection()-metodin tuloste (URLYhteys) on tyyppivalettu Http:ksiURLYhteys.

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

Voimme asettaa pyyntötyypiksi ”HEAD” ”GET”:n sijaan, jolloin palautetaan vain otsikot eikä dokumentin runkoa.

huc.setRequestMethod("HEAD");

Kun connect()-metodia kutsutaan, varsinainen yhteys URL-osoitteeseen muodostetaan ja pyyntö lähetetään.

huc.connect();

Vaihe 5: Tarkista linkit

getResponse-funktion käyttäminenCode()-metodilla voimme saada pyynnön vastauskoodin.

respCode = huc.getResponseCode();

Vastauskoodin perusteella yritämme tarkistaa linkin tilan.

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

Näin voimme hakea kaikki linkit verkkosivulta ja tulostaa, ovatko linkit kelvollisia vai rikkinäisiä.

Kuinka saada KAIKKI Web-sivun linkit

Yksi verkon yleisimmistä menetelmistä Testaus on testata, toimivatko kaikki sivulla olevat linkit. Tämä voidaan tehdä kätevästi käyttämällä näiden yhdistelmää Java jokaiselle silmukalle, etsi elementtejä () & By.tagName("a") menetelmällä.

findElements()-metodi palauttaa listan verkkoelementeistä, joiden kohdalla on tunniste a. Jokainen elementti käsitellään for-each-silmukan avulla.

Hanki KAIKKI Web-sivun linkit

Alla oleva WebDriver-koodi tarkistaa jokaisen linkin osoitteesta Mercury Tours-kotisivulla voit selvittää, mitkä toimivat ja mitkä ovat vielä rakenteilla.

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

Tulosteen tulee olla samanlainen kuin alla osoitettu.

  • Kuvalinkkeihin pääsee käsiksi By.cssSelector()- ja By.xpath()-metodeilla.

Hanki KAIKKI Web-sivun linkit

Ongelmien karttoittaminen

Yksittäistapauksessa koodin ensimmäinen linkki voi olla "Koti"-linkki. Tällaisessa tapauksessa driver.navigate.back()-toiminto näyttää tyhjän sivun, koska ensimmäinen toiminto on selaimen avaaminen. Ajuri ei löydä kaikkia muita linkkejä tyhjästä selaimesta. Niinpä IDE heittää poikkeuksen, eikä loput koodista suoriteta. Tämä voidaan helposti käsitellä If-silmukan avulla.

UKK

Selenium kerää kaikki ankkuritunnisteet ja lähettää HTTP HEAD -pyynnön jokaiselle URL, ja merkitsee kaikki arvon 400 tai korkeamman palauttavat linkit rikkinäisiksi.

4xx-koodi osoittaa asiakaspuolen ongelman, kuten puuttuvan sivun, kun taas 5xx-koodi osoittaa palvelinpuolen virheen pyynnön käsittelyssä.

Kyllä. Kuvalähteet kerätään By.cssSelector():lla tai By.xpath():lla, ja sitten jokainen lähdekoodi URL validoidaan sen HTTP-vastauskoodin avulla.

Kyllä. Tekoälyyn perustuvat hakurobotit skannaavat sivuja, seuraavat linkkejä ja merkitsevät rikkinäisiä tai uudelleenohjaavia sivustoja. URLs ilman manuaalista skriptausta.

Tekoäly valvoo linkkien kuntoa ajan kuluessa, ennustaa vikoja ja ehdottaa korvaavia osia, mikä vähentää toistuvia manuaalisia linkkitarkastuksia.

Tiivistä tämä viesti seuraavasti: