Kako pronaći neispravne veze u Selenium

⚡ Pametni sažetak

Pronalaženje neispravnih veza u Selenium WebDriver uključuje prikupljanje svake oznake sidra, slanje HTTP HEAD zahtjeva svakoj URLi čitanje koda odgovora. Linkovi koji vraćaju 400 ili više označavaju se kao neispravni, dok valjani linkovi vraćaju kodove 2xx.

  • 🔗 Definicija: Prekinuta veza je URL koji se ne može dosegnuti, obično vraća grešku 4xx ili 5xx.
  • 🧭 Zašto je važno: Neispravne poveznice štete korisničkom iskustvu i SEO-u, pa automatizirane provjere zamjenjuju sporu ručnu verifikaciju.
  • 📥 Prikupi poveznice: Koristite findElements s By.tagName("a") za prikupljanje svakog sidrenog elementa na stranici u popis.
  • 📡 Pošalji HEAD zahtjev: Otvorite HttpURLVeza, postavite metodu na HEAD i pročitajte kod odgovora prema URL.
  • Potvrdi status: Tretirajte kod odgovora 400 ili više kao neispravan, a bilo koji kod 2xx kao ispravnu vezu.

Kako pronaći neispravne veze u Selenium

Što su prekinute veze?

Neispravne poveznice su poveznice ili URLkoji nisu dostupni. Moguće je da ne rade ili ne funkcioniraju zbog neke pogreške poslužitelja.

A URL uvijek će imati status 2xx, što je valjano. Postoje različiti HTTP statusni kodovi koji imaju različite svrhe. Za nevažeći zahtjev, HTTP status je 4xx i 5xx.

Klasa statusnih kodova 4xx uglavnom se odnosi na pogreške na strani klijenta, a klasa statusnih kodova 5xx uglavnom se odnosi na pogreške odgovora poslužitelja.

Najvjerojatnije nećemo moći potvrditi radi li ta veza ili ne dok je ne kliknemo i potvrdimo.

Zašto biste trebali provjeriti neispravne veze?

Uvijek biste trebali provjeriti da na web-mjestu nema neispravnih poveznica jer korisnik ne bi trebao završiti na stranici s pogreškom.

Pogreška se događa ako se pravila ne ažuriraju ispravno ili traženi resursi ne postoje na poslužitelju.

Ručna provjera poveznica je mukotrpan zadatak jer svaka web stranica može imati veliki broj poveznica i ručni postupak se mora ponoviti za sve stranice.

Skripta za automatizaciju koja koristi Selenium koji će automatizirati proces je prikladnije rješenje.

Kako provjeriti neispravne veze i slike Selenium

Za provjeru neispravnih veza morat ćete učiniti sljedeće korake.

  1. Prikupite sve poveznice na web stranici na temelju oznake.
  2. Pošaljite HTTP zahtjev za vezu i pročitajte HTTP kod odgovora.
  3. Na temelju HTTP koda odgovora saznajte je li veza valjana ili neispravna.
  4. Ponovite ovo za sve snimljene veze.

Code pronaći neispravne poveznice na web stranici

Ispod je kod web upravljačkog programa koji testira naš slučaj upotrebe:

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

    }
}

Objašnjavajući kod neispravnih veza

Korak 1: Uvoz paketa

Uvezite donji paket uz zadane pakete:

import java.net.HttpURLConnection;

Koristeći metode u ovom paketu, možemo slati HTTP zahtjeve i uhvatiti HTTP kodove odgovora iz odgovora.

Korak 2: Prikupite sve veze na web stranici

Identificirajte sve poveznice na web stranici i pohranite ih u popis.

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

Nabavite iterator za kretanje kroz listu.

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

Korak 3: Identificiranje i validacija URL

U ovom dijelu provjerit ćemo je li URL pripada domeni treće strane ili je URL je prazno/null.

Dohvatite href oznake sidra i pohranite ga u varijablu url.

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

Provjerite je li URL je null ili prazan i preskočite preostale korake ako je uvjet ispunjen.

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

Provjerite je li URL pripada glavnoj domeni ili trećoj strani. Preskočite preostale korake ako pripada domeni treće strane.

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

Korak 4: Pošaljite HTTP zahtjev

HttpURLKlasa Connection ima metode za slanje HTTP zahtjeva i hvatanje HTTP koda odgovora. Dakle, izlaz metode openConnection() (URLConnection) je tipa cast na HttpURLVeza.

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

Možemo postaviti tip zahtjeva kao "HEAD" umjesto "GET", tako da se vraćaju samo zaglavlja, a ne tijelo dokumenta.

huc.setRequestMethod("HEAD");

Pozivanjem metode connect() uspostavlja se stvarna veza s URL-om i šalje se zahtjev.

huc.connect();

Korak 5: Provjera valjanosti veza

Korištenje funkcije getResponseCode() metodom, možemo dobiti kod odgovora za zahtjev.

respCode = huc.getResponseCode();

Na temelju koda odgovora pokušat ćemo provjeriti status veze.

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

Dakle, možemo dobiti sve poveznice s web stranice i ispisati jesu li poveznice valjane ili neispravne.

Kako doći do SVE poveznice web stranice

Jedan od uobičajenih postupaka na webu Ispitivanje je testirati rade li sve veze unutar stranice. To se može jednostavno učiniti kombinacijom Java za-svaku petlju, pronađiElemente() & By.tagName("a") metoda.

Metoda findElements() vraća popis web elemenata s oznakom a. Korištenjem petlje for-each pristupa se svakom elementu.

Dobijte SVE veze na web stranici

WebDriver kod u nastavku provjerava svaku vezu iz Mercury Obilasci početne stranice za određivanje onih koji rade i onih koji su još u izradi.

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

Izlaz bi trebao biti sličan dolje navedenom.

  • Pristup poveznicama slika vrši se pomoću metoda By.cssSelector() i By.xpath().

Dobijte SVE veze na web stranici

Rješavanje problema

U izoliranom slučaju, prva poveznica kojoj pristupi kod može biti poveznica "Početna". U takvom slučaju, akcija driver.navigate.back() prikazat će praznu stranicu jer je prva akcija otvaranje preglednika. Upravljački program neće moći pronaći sve ostale poveznice u praznom pregledniku. Stoga će IDE izbaciti iznimku i ostatak koda se neće izvršiti. To se može lako riješiti pomoću If petlje.

Pitanja i odgovori

Selenium prikuplja sve oznake sidra, šalje HTTP HEAD zahtjev svakoj URLi označava svaku vezu koja vraća 400 ili više kao neispravnu.

Kod 4xx označava problem na strani klijenta, poput nedostajuće stranice, dok kod 5xx označava grešku na strani poslužitelja prilikom obrade zahtjeva.

Da. Izvori slika prikupljaju se pomoću By.cssSelector() ili By.xpath(), a zatim svaki izvorni kod URL se potvrđuje putem HTTP koda odgovora.

Da. Alati za indeksiranje temeljeni na umjetnoj inteligenciji skeniraju stranice, slijede poveznice i označavaju neispravne ili preusmjeravajuće stranice. URLbez ručnog skriptiranja.

Umjetna inteligencija prati stanje veze tijekom vremena, predviđa kvarove i predlaže zamjene, smanjujući ponovljene ručne revizije veza.

Sažmite ovu objavu uz: