Kako najti vse / prekinjene povezave s pomočjo programa Selenium Webdriver

Kazalo:

Anonim

Kaj so prekinjene povezave?

Zlomljene povezave so povezave ali URL-ji, ki niso dosegljivi. Morda ne delajo ali ne delujejo zaradi napake strežnika

URL bo vedno imel status 2xx, ki je veljaven. Obstajajo različne kode stanja HTTP, ki imajo različne namene. Za neveljavno zahtevo je stanje HTTP 4xx in 5xx.

Razred 4xx razreda statusne kode je v glavnem namenjen napakam na strani odjemalca, razred 5xx statusnih kod pa predvsem napak strežnika.

Najverjetneje ne bomo mogli potrditi, ali ta povezava deluje ali ne, dokler je ne kliknemo in potrdimo.

Zakaj bi morali preveriti prekinjene povezave?

Vedno se prepričajte, da na spletnem mestu ni prekinjenih povezav, ker uporabnik ne sme priti na stran z napako.

Napaka se zgodi, če se pravila ne posodobijo pravilno ali če zahtevani viri na strežniku ne obstajajo.

Ročno preverjanje povezav je dolgočasno opravilo, saj ima lahko vsaka spletna stran veliko število povezav, ročni postopek pa je treba ponoviti za vse strani.

Skript za avtomatizacijo s selenom, ki bo postopek avtomatiziral, je bolj primerna rešitev.

Kako preveriti prekinjene povezave in slike

Če želite preveriti prekinjene povezave, boste morali narediti naslednje korake.

  1. Zberite vse povezave na spletni strani glede na oznako .
  2. Pošljite zahtevo HTTP za povezavo in preberite odzivno kodo HTTP.
  3. Na podlagi odzivne kode HTTP ugotovite, ali je povezava veljavna ali prekinjena.
  4. To ponovite za vse zajete povezave.

Koda za iskanje prekinjenih povezav na spletni strani

Spodaj je koda spletnega gonilnika, ki preizkuša naš primer uporabe:

avtomatizacija paketovPractice;import java.io.IOException;import java.net.HttpURLConnection;uvoz java.net.MalformedURLException;uvoz java.net.URL;uvoz java.util.Iterator;uvoz java.util.List;uvoz org.openqa.selenium.By;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.WebElement;uvoz org.openqa.selenium.chrome.ChromeDriver;javni razred BrokenLinks {zasebni statični gonilnik WebDriver = null;public static void main (String [] args) {// TODO Samodejno ustvarjena škrbina metodeString homePage = "http://www.zlti.com";URL niza = "";HttpURLConnection huc = null;int respCode = 200;gonilnik = nov ChromeDriver ();driver.manage (). window (). maximize ();driver.get (homePage);Seznam  povezave = driver.findElements (By.tagName ("a"));Iterator  it = links.iterator ();medtem ko (it.hasNext ()) {url = it.next (). getAttribute ("href");System.out.println (url);if (url == null || url.isEmpty ()) {System.out.println ("URL ali ni konfiguriran za sidrno oznako ali je prazen");nadaljevati;}if (! url.startsWith (homePage)) {System.out.println ("URL pripada drugi domeni, preskoči jo.");nadaljevati;}poskusite {huc = (HttpURLConnection) (nov URL (url) .openConnection ());huc.setRequestMethod ("HEAD");huc.connect ();respCode = huc.getResponseCode ();če (respCode> = 400) {System.out.println (url + "je prekinjena povezava");}sicer {System.out.println (url + "je veljavna povezava");}} ulov (MalformedURLException e) {// TODO Samodejno ustvarjen blok ulovae.printStackTrace ();} ulov (IOException e) {// TODO Samodejno ustvarjen blok ulovae.printStackTrace ();}}driver.quit ();}}

Razlaga kode Primer

1. korak: Uvoz paketov

Uvoz spodnjega paketa poleg privzetih paketov:

import java.net.HttpURLConnection;

Z metodami v tem paketu lahko pošljemo zahteve HTTP in iz odgovora zajamemo kode HTTP odziva.

2. korak: Zberite vse povezave na spletni strani

Poiščite vse povezave na spletni strani in jih shranite na seznam.

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

Pridobite Iterator za prehod po seznamu.

Iterator  it = links.iterator ();

3. korak: Prepoznavanje in preverjanje URL-ja

V tem delu bomo preverili, ali URL pripada domeni tretjih oseb ali je URL prazen / ničen.

Pridobite href sidrne oznake in jo shranite v spremenljivko url.

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

Preverite, ali je URL ničen ali prazen, in preskočite preostale korake, če je pogoj izpolnjen.

if (url == null || url.isEmpty ()) {System.out.println ("URL ali ni konfiguriran za sidrno oznako ali je prazen");nadaljevati;}

Preverite, ali URL pripada glavni domeni ali tretji osebi. Preskočite preostale korake, če pripada tretji domeni.

 if (! url.startsWith (homePage)) {System.out.println ("URL pripada drugi domeni, preskoči jo.");nadaljevati;}

4. korak: Pošljite zahtevo http

Razred HttpURLConnection ima metode za pošiljanje zahteve HTTP in zajemanje odzivne kode HTTP. Torej, izhod metode openConnection () (URLConnection) je uliven v HttpURLConnection.

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

Vrsta zahteve lahko nastavimo kot "HEAD" namesto "GET". Tako da se vrnejo samo glave in ne telo dokumenta.

huc.setRequestMethod ("HEAD");

Pri klicu metode connect () se vzpostavi dejanska povezava z url-om in zahteva se pošlje.

huc.connect ();

5. korak: Preverjanje povezav

Z uporabo metode getResponseCode () lahko dobimo kodo za odgovor na zahtevo

respCode = huc.getResponseCode ();

Na podlagi odzivne kode bomo poskusili preveriti stanje povezave.

če (respCode> = 400) {System.out.println (url + "je prekinjena povezava");}sicer {System.out.println (url + "je veljavna povezava");}

Tako lahko na spletni strani dobimo vse povezave in natisnemo, ali so povezave veljavne ali nepravilne.

Upam, da vam bo ta vadnica pomagala pri preverjanju prekinjenih povezav z uporabo selena.

Kako do VSEH povezav do spletne strani

Eden najpogostejših postopkov spletnega testiranja je preizkusiti, ali vse povezave na strani delujejo. To lahko enostavno naredite s kombinacijo metode Java za vsako zanko , metode findElements () in By.tagName ("a") .

Metoda findElements () vrne seznam spletnih elementov z oznako a. Z uporabo zanke za vsako se dostopa do vsakega elementa.

Spodnja koda WebDriver preveri vsako povezavo na domači strani Mercury Tours, da ugotovi, katere delujejo in tiste, ki so še v izdelavi.

uvoz org.openqa.selenium.By;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.chrome.ChromeDriver;uvoz java.util.List;uvoz java.util.concurrent.TimeUnit;uvoz org.openqa.selenium. *;javni razred P1 {public static void main (String [] args) {String baseUrl = "http://demo.guru99.com/test/newtours/";System.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");Gonilnik WebDriver = nov ChromeDriver ();String underConsTitle = "V izdelavi: Mercury Tours";driver.manage (). timeouts (). implicitnoWait (5, TimeUnit.SECONDS);driver.get (baseUrl);Seznam  linkElements = driver.findElements (By.tagName ("a"));String [] linkTexts = nov niz [linkElements.size ()];int i = 0;// izvlečimo besedila povezav vsakega elementa povezaveza (WebElement e: linkElements) {linkTexts [i] = e.getText ();i ++;}// preizkusimo vsako povezavoza (String t: linkTexts) {driver.findElement (By.linkText (t)). click ();če (driver.getTitle (). je enako (underConsTitle)) {System.out.println ("\" "+ t +" \ ""+ "je v izdelavi.");} še {System.out.println ("\" "+ t +" \ ""+ "deluje.");}driver.navigate (). back ();}driver.quit ();}}

Izhod mora biti podoben spodnjemu.

  • Dostopanje do slikovnih povezav poteka po metodah By.cssSelector () in By.xpath ().
  • Odpravljanje težav

    V osamljenem primeru je lahko prva povezava, do katere dostopa koda, povezava "Domov". V tem primeru bo dejanje driver.navigate.back () prikazalo prazno stran, saj prvo dejanje odpira brskalnik. Voznik ne bo mogel najti vseh drugih povezav v praznem brskalniku. IDE bo torej vrgel izjemo in preostala koda se ne bo izvedla. To je enostavno rešiti s pomočjo zanke If.