Čo sú nefunkčné odkazy?
Nefunkčné odkazy sú odkazy alebo adresy URL, ktoré nie sú dostupné. Môžu byť nefunkčné alebo nefungujú kvôli chybe servera
URL bude mať vždy stav s 2xx, ktorý je platný. Existujú rôzne stavové kódy HTTP, ktoré majú rôzne účely. Pre neplatnú požiadavku je stav HTTP 4xx a 5xx.
Trieda stavového kódu 4xx slúži hlavne na chybu na strane klienta a trieda 4xx stavového kódu slúži hlavne na chybu odpovede servera.
S najväčšou pravdepodobnosťou nebudeme môcť potvrdiť, či daný odkaz funguje alebo nie, kým na neho neklikneme a nepotvrdíme ho.
Prečo by ste mali skontrolovať nefunkčné odkazy?
Vždy by ste sa mali ubezpečiť, že na webe nie sú žiadne nefunkčné odkazy, pretože používateľ by sa nemal dostať na chybovú stránku.
Chyba sa stane, ak pravidlá nie sú správne aktualizované alebo požadované zdroje na serveri neexistujú.
Manuálna kontrola odkazov je zdĺhavá úloha, pretože každá webová stránka môže obsahovať veľké množstvo odkazov a manuálny proces sa musí opakovať pre všetky stránky.
Výstižnejším riešením je automatizačný skript využívajúci selén, ktorý tento proces automatizuje.
Ako skontrolovať nefunkčné odkazy a obrázky
Ak chcete skontrolovať nefunkčné odkazy, budete musieť urobiť nasledujúce kroky.
- Zhromažďujte všetky odkazy na webovej stránke na základe značky .
- Pošlite požiadavku HTTP na odkaz a prečítajte si kód odpovede HTTP.
- Na základe kódu odpovede HTTP zistite, či je odkaz platný alebo nefunkčný.
- Tento postup opakujte pre všetky zachytené odkazy.
Kód vyhľadajte nefunkčné odkazy na webovej stránke
Nižšie je uvedený kód webového ovládača, ktorý testuje náš prípad použitia:
balík 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;verejná trieda BrokenLinks {súkromný statický ovládač WebDriver = null;public static void main (String [] args) {// TODO Automaticky generovaný pahýl metódyReťazec homePage = "http://www.zlti.com";Reťazec url = "";HttpURLConnection huc = null;int respCode = 200;ovládač = nový ChromeDriver ();driver.manage (). window (). maximize ();driver.get (homePage);Zoznamlinks = driver.findElements (By.tagName ("a"));Iterátor it = links.iterator ();while (it.hasNext ()) {url = it.next (). getAttribute ("href");System.out.println (url);if (url == null || url.isEmpty ()) {System.out.println ("URL nie je nakonfigurovaná pre kotviacu značku alebo je prázdna");ďalej;}if (! url.startsWith (homePage)) {System.out.println ("URL patrí do inej domény, preskočí ju.");ďalej;}skúsiť {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");}else {System.out.println (url + "je platný odkaz");}} úlovok (MalformedURLException e) {// TODO Automaticky generovaný blok úlovkove.printStackTrace ();} chytit (IOException e) {// TODO Automaticky generovaný blok úlovkove.printStackTrace ();}}driver.quit ();}}
Vysvetlenie kódu Príklad
Krok 1: Import balíkov
Okrem predvolených balíkov importujte aj balíček pod:
import java.net.HttpURLConnection;
Pomocou metód v tomto balíku môžeme odosielať požiadavky HTTP a zachytávať kódy odpovedí HTTP z odpovede.
Krok 2: Zhromaždite všetky odkazy na webovej stránke
Identifikujte všetky odkazy na webovej stránke a uložte ich do Zoznamu.
Zoznamlinks = driver.findElements (By.tagName ("a"));
Získajte Iterator, aby ste prechádzali zoznamom.
Iterátorit = links.iterator ();
Krok 3: Identifikácia a overenie adresy URL
V tejto časti skontrolujeme, či URL patrí do domény tretej strany alebo či je URL prázdna / nulová.
Získajte href značky kotvy a uložte ju do premennej adresy URL.
url = it.next (). getAttribute ("href");
Skontrolujte, či je adresa URL nulová alebo prázdna a ak je podmienka splnená, ďalšie kroky preskočte.
if (url == null || url.isEmpty ()) {System.out.println ("URL nie je nakonfigurovaná pre kotviacu značku alebo je prázdna");ďalej;}
Skontrolujte, či adresa URL patrí k hlavnej doméne alebo tretej strane. Zvyšné kroky, ak patria do domény tretej strany, preskočte.
if (! url.startsWith (homePage)) {System.out.println ("URL patrí do inej domény, preskočí ju.");ďalej;}
Krok 4: Odošlite požiadavku http
Trieda HttpURLConnection má metódy na odoslanie žiadosti HTTP a zachytenie kódu odpovede HTTP. Takže výstup metódy openConnection () (URLConnection) je typ prenášaný do HttpURLConnection.
huc = (HttpURLConnection) (nová adresa URL (url) .opConnection ());
Môžeme nastaviť typ žiadosti ako „HEAD“ namiesto „GET“. Aby sa vrátili iba hlavičky a nie telo dokumentu.
huc.setRequestMethod ("HLAVA");
Pri vyvolaní metódy connect () sa vytvorí skutočné pripojenie k adrese URL a odošle sa požiadavka.
huc.connect ();
Krok 5: Overenie platnosti odkazov
Pomocou metódy getResponseCode () môžeme získať kód odpovede na požiadavku
respCode = huc.getResponseCode ();
Na základe kódu odpovede sa pokúsime skontrolovať stav odkazu.
if (respCode> = 400) {System.out.println (url + "je nefunkčný odkaz");}else {System.out.println (url + "je platný odkaz");}
Môžeme teda získať všetky odkazy z webovej stránky a vytlačiť, či sú odkazy platné alebo nefunkčné.
Dúfam, že vám tento návod pomôže pri kontrole nefunkčných odkazov pomocou selénu.
Ako získať VŠETKY odkazy na webovú stránku
Jedným z bežných postupov pri webovom testovaní je testovanie funkčnosti všetkých odkazov na stránke. To je možné pohodlne vykonať pomocou kombinácie metódy Java for-each loop , findElements () & By.tagName ("a") .
Metóda findElements () vráti zoznam webových prvkov so značkou a. Pomocou slučky for-each je prístupný každý prvok.
Kód WebDriver uvedený nižšie kontroluje každý odkaz z domovskej stránky Mercury Tours a určuje, ktoré z nich fungujú a tie, ktoré sú stále vo výstavbe.
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. *;verejná trieda P1 {public static void main (String [] args) {Reťazec baseUrl = "http://demo.guru99.com/test/newtours/";System.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");Ovládač WebDriver = nový ChromeDriver ();String underConsTitle = "Vo výstavbe: Mercury Tours";driver.manage (). timeouts (). implicitlyWait (5, TimeUnit.SECONDS);driver.get (baseUrl);ZoznamlinkElements = driver.findElements (By.tagName ("a"));Reťazec [] linkTexts = nový Reťazec [linkElements.size ()];int i = 0;// extrahuje texty odkazov každého prvku odkazupre (WebElement e: linkElements) {linkTexts [i] = e.getText ();i ++;}// otestovať každý odkazpre (Reťazec t: linkTexts) {driver.findElement (By.linkText (t)). click ();if (driver.getTitle (). equals (underConsTitle)) {System.out.println ("\" "+ t +" \ ""+ „je vo výstavbe.“);} else {System.out.println ("\" "+ t +" \ ""+ „funguje.“);}driver.navigate (). späť ();}driver.quit ();}}
Výstup by mal byť podobný tomu, ktorý je uvedený nižšie.
Riešenie problémov
V ojedinelých prípadoch môže byť prvým odkazom, ku ktorému kód pristupuje, odkaz „Domov“. V takom prípade zobrazí akcia driver.navigate.back () prázdnu stránku, pretože prvá akcia otvára prehliadač. Vodič nebude môcť nájsť všetky ďalšie odkazy v prázdnom prehliadači. IDE teda vyvolá výnimku a zvyšok kódu sa nespustí. To sa dá ľahko zvládnuť pomocou slučky If.