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.
- Shromažďujte všechny odkazy na webové stránce na základě značky .
- Odešlete požadavek HTTP na odkaz a přečtěte si kód odpovědi HTTP.
- Zjistěte, zda je odkaz platný nebo nefunkční, na základě kódu odpovědi HTTP.
- 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);Seznamlinks = 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.
Seznamlinks = driver.findElements (By.tagName ("a"));
Získejte Iterator pro procházení Seznamem.
Iteratorit = 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);SeznamlinkElements = 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.
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.