Jak najít všechny / nefunkční odkazy pomocí selenového webdriveru

Obsah:

Anonim

Co jsou nefunkční odkazy?

Nefunkční odkazy jsou odkazy nebo adresy URL, které nejsou dostupné. Mohou být nefunkční nebo nefungují kvůli nějaké chybě serveru

URL bude mít vždy stav s 2xx, který je platný. Existují různé stavové kódy HTTP, které mají různé účely. Pro neplatný požadavek je stav HTTP 4xx a 5xx.

Třída stavových kódů 4xx je určena hlavně pro chyby na straně klienta a třída 5xx stavových kódů slouží hlavně pro chyby odezvy serveru.

S největší pravděpodobností nebudeme moci potvrdit, zda tento odkaz funguje nebo ne, dokud na něj neklikneme a nepotvrdíme ho.

Proč byste měli zkontrolovat nefunkční odkazy?

Vždy byste se měli ujistit, že na webu nejsou žádné nefunkční odkazy, protože uživatel by se neměl dostat na chybovou stránku.

K chybě dojde, pokud pravidla nejsou správně aktualizována nebo požadované prostředky na serveru neexistují.

Ruční kontrola odkazů je zdlouhavý úkol, protože každá webová stránka může obsahovat velké množství odkazů a ruční postup je nutné opakovat pro všechny stránky.

Výstižnějším řešením je automatizační skript využívající selen, který tento proces automatizuje.

Jak zkontrolovat nefunkční odkazy a obrázky

Chcete-li zkontrolovat nefunkční odkazy, budete muset provést následující kroky.

  1. Shromažďujte všechny odkazy na webové stránce na základě značky .
  2. Odešlete požadavek HTTP na odkaz a přečtěte si kód odpovědi HTTP.
  3. Zjistěte, zda je odkaz platný nebo nefunkční, na základě kódu odpovědi HTTP.
  4. Tento postup opakujte pro všechny zachycené odkazy.

Kód vyhledejte nefunkční odkazy na webové stránce

Níže je uveden kód webového ovladače, který testuje náš případ použití:

balíček 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;veřejná třída BrokenLinks {soukromý statický ovladač WebDriver = null;public static void main (String [] args) {// TODO Automaticky generovaný útržek metodyŘetězec homePage = "http://www.zlti.com";Řetězec url = "";HttpURLConnection huc = null;int respCode = 200;driver = new ChromeDriver ();driver.manage (). window (). maximize ();driver.get (homePage);Seznam  links = driver.findElements (By.tagName ("a"));Iterator  it = links.iterator ();while (it.hasNext ()) {url = it.next (). getAttribute ("href");System.out.println (url);if (url == null || url.isEmpty ()) {System.out.println ("URL buď není nakonfigurováno pro kotevní značku, nebo je prázdné");pokračovat;}if (! url.startsWith (homePage)) {System.out.println ("URL patří do jiné domény, přeskočí ji.");pokračovat;}Snaž se {huc = (HttpURLConnection) (nová adresa URL (url) .opConnection ());huc.setRequestMethod ("HLAVA");huc.connect ();respCode = huc.getResponseCode ();if (respCode> = 400) {System.out.println (url + "je nefunkční odkaz");}jiný{System.out.println (url + "je platný odkaz");}} úlovek (MalformedURLException e) {// TODO Automaticky generovaný blok zachyceníe.printStackTrace ();} chytit (IOException e) {// TODO Automaticky generovaný blok zachyceníe.printStackTrace ();}}driver.quit ();}}

Vysvětlení kódu Příklad

Krok 1: Import balíčků

Kromě výchozích balíčků importujte pod balíček:

import java.net.HttpURLConnection;

Pomocí metod v tomto balíčku můžeme odeslat požadavky HTTP a zachytit kódy odpovědí HTTP z odpovědi.

Krok 2: Shromážděte všechny odkazy na webové stránce

Identifikujte všechny odkazy na webové stránce a uložte je do seznamu.

Seznam  links = driver.findElements (By.tagName ("a"));

Získejte Iterator pro procházení Seznamem.

Iterator  it = links.iterator ();

Krok 3: Identifikace a ověření adresy URL

V této části zkontrolujeme, zda URL patří do domény třetí strany nebo zda je URL prázdná / null.

Získejte href značky kotvy a uložte ji do proměnné url.

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

Zkontrolujte, zda je adresa URL prázdná nebo prázdná, a pokud je podmínka splněna, zbývající kroky přeskočte.

if (url == null || url.isEmpty ()) {System.out.println ("URL buď není nakonfigurováno pro kotevní značku, nebo je prázdné");pokračovat;}

Zkontrolujte, zda adresa URL patří k hlavní doméně nebo třetí straně. Pokud patří k doméně třetí strany, zbývající kroky přeskočte.

 if (! url.startsWith (homePage)) {System.out.println ("URL patří do jiné domény, přeskočí ji.");pokračovat;}

Krok 4: Odeslání požadavku http

Třída HttpURLConnection má metody k odeslání požadavku HTTP a zachycení kódu odpovědi HTTP. Takže výstup metody openConnection () (URLConnection) je typ přetypovaný na HttpURLConnection.

huc = (HttpURLConnection) (nová adresa URL (url) .opConnection ());

Můžeme nastavit typ požadavku na „HEAD“ místo na „GET“. Takže jsou vráceny pouze hlavičky a ne tělo dokumentu.

huc.setRequestMethod ("HLAVA");

Při vyvolání metody connect () je navázáno skutečné připojení k url a požadavek je odeslán.

huc.connect ();

Krok 5: Ověření odkazů

Pomocí metody getResponseCode () můžeme získat kód odpovědi pro požadavek

respCode = huc.getResponseCode ();

Na základě kódu odpovědi se pokusíme zkontrolovat stav odkazu.

if (respCode> = 400) {System.out.println (url + "je nefunkční odkaz");}jiný{System.out.println (url + "je platný odkaz");}

Můžeme tedy získat všechny odkazy z webové stránky a vytisknout, zda jsou odkazy platné nebo poškozené.

Doufám, že vám tento návod pomůže při kontrole nefunkčních odkazů pomocí selenu.

Jak získat VŠECHNY odkazy na webovou stránku

Jedním z běžných postupů při testování webu je testování, zda fungují všechny odkazy na stránce. To lze pohodlně provést pomocí kombinace metody Java for-each loop , findElements () & By.tagName ("a") .

Metoda findElements () vrací seznam webových prvků se značkou a. Pomocí smyčky pro každý je přístup ke každému prvku.

Níže uvedený kód WebDriver kontroluje každý odkaz z domovské stránky Mercury Tours, aby určil ty, které fungují a ty, které jsou stále ve výstavbě.

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. *;veřejná třída P1 {public static void main (String [] args) {Řetězec baseUrl = "http://demo.guru99.com/test/newtours/";System.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");Ovladač WebDriver = nový ChromeDriver ();String underConsTitle = "Ve výstavbě: Prohlídky Merkuru";driver.manage (). timeouts (). implicitlyWait (5, TimeUnit.SECONDS);driver.get (baseUrl);Seznam  linkElements = driver.findElements (By.tagName ("a"));Řetězec [] linkTexts = nový Řetězec [linkElements.size ()];int i = 0;// extrahuje texty odkazů každého prvku odkazupro (WebElement e: linkElements) {linkTexts [i] = e.getText ();i ++;}// otestovat každý odkazpro (String t: linkTexts) {driver.findElement (By.linkText (t)). click ();if (driver.getTitle (). equals (underConsTitle)) {System.out.println ("\" "+ t +" \ ""+ „je ve výstavbě.“);} else {System.out.println ("\" "+ t +" \ ""+ „funguje.“);}driver.navigate (). back ();}driver.quit ();}}

Výstup by měl být podobný tomu, který je uveden níže.

  • Přístup k obrázkovým odkazům se provádí pomocí metod By.cssSelector () a By.xpath ().
  • Odstraňování problémů

    V ojedinělém případě může být prvním odkazem, ke kterému kód přistupuje, odkaz „Domů“. V takovém případě zobrazí akce driver.navigate.back () prázdnou stránku, protože první akce otevírá prohlížeč. Řidič nebude moci najít všechny ostatní odkazy v prázdném prohlížeči. Takže IDE vyvolá výjimku a zbytek kódu se nespustí. To lze snadno zvládnout pomocí smyčky If.