Kako pronaći sve / prekinute veze pomoću programa Selenium Webdriver

Sadržaj:

Anonim

Što su prekinute veze?

Prekinute veze su veze ili URL-ovi koji nisu dostupni. Mogu biti u kvaru ili ne funkcioniraju zbog neke pogreške poslužitelja

URL će uvijek imati status s 2xx koji je valjan. Postoje različiti HTTP kodovi statusa koji imaju različite svrhe. Za nevažeći zahtjev, HTTP status je 4xx i 5xx.

4xx klasa statusnog koda uglavnom se odnosi na pogrešku na strani klijenta, a 5xx klasa statusnih kodova uglavnom je na pogrešci 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 prekinute veze?

Uvijek se pobrinite da na web mjestu nema prekinutih veza jer korisnik ne bi trebao otvoriti stranicu 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 veza dosadan je zadatak, jer svaka web stranica može imati velik broj veza, a ručni postupak mora se ponoviti za sve stranice.

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

Kako provjeriti prekinute veze i slike

Za provjeru neispravnih veza morat ćete napraviti sljedeće korake.

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

Kôd za pronalaženje prekinutih veza na web stranici

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

paket automatizacijaPractice;import java.io.IOException;import java.net.HttpURLConnection;import java.net.MalformedURLException;uvoz java.net.URL;import java.util.Iterator;import java.util.List;uvoz org.openqa.selenium.By;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.WebElement;uvoz org.openqa.selenium.chrome.ChromeDriver;javna klasa BrokenLinks {privatni statički pogonitelj WebDrivera = null;javna statička void glavna (String [] args) {// TODO Automatski generirani kvar metodeString homePage = "http://www.zlti.com";URL niza = "";HttpURLConnection huc = null;int respCode = 200;upravljački program = novi ChromeDriver ();driver.manage (). window (). maximize ();driver.get (homePage);Popis  veza = 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 ili nije konfiguriran za oznaku sidra ili je prazan");nastaviti;}if (! url.startsWith (homePage)) {System.out.println ("URL pripada drugoj domeni, preskačući je.");nastaviti;}probaj {huc = (HttpURLConnection) (novi URL (url) .openConnection ());huc.setRequestMethod ("GLAVA");huc.connect ();respCode = huc.getResponseCode ();ako (respCode> = 400) {System.out.println (url + "neispravna je veza");}drugo{System.out.println (url + "valjana je veza");}} catch (MalformedURLException e) {// TODO Automatski generirani blok ulovae.printStackTrace ();} catch (IOException e) {// TODO Automatski generirani blok ulovae.printStackTrace ();}}driver.quit ();}}

Objašnjenje koda Primjer

Korak 1: Uvoz paketa

Uvoz donjeg paketa uz zadane pakete:

import java.net.HttpURLConnection;

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

Korak 2: Prikupite sve veze na web stranici

Prepoznajte sve poveznice na web stranici i spremite ih na Popis.

Popis  veza = driver.findElements (By.tagName ("a"));

Nabavite Iterator za prelazak kroz Popis.

Iterator  it = links.iterator ();

Korak 3: Identificiranje i provjera valjanosti URL-a

U ovom ćemo dijelu provjeriti pripada li URL domeni treće strane ili je URL prazan / ništavan.

Nabavite href sidrene oznake i spremite je u url varijablu.

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

Provjerite je li URL null ili Empty i preskočite preostale korake ako je uvjet zadovoljen.

if (url == null || url.isEmpty ()) {System.out.println ("URL ili nije konfiguriran za oznaku sidra ili je prazan");nastaviti;}

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

 if (! url.startsWith (homePage)) {System.out.println ("URL pripada drugoj domeni, preskačući je.");nastaviti;}

Korak 4: Pošaljite http zahtjev

Klasa HttpURLConnection ima metode za slanje HTTP zahtjeva i hvatanje HTTP koda odgovora. Dakle, izlaz metode openConnection () (URLConnection) ulijeva se u HttpURLConnection.

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

Vrsta zahtjeva možemo postaviti kao "HEAD" umjesto "GET". Tako da se vraćaju samo zaglavlja, a ne i tijelo dokumenta.

huc.setRequestMethod ("GLAVA");

Na pozivanje metode connect () uspostavlja se stvarna veza na url i zahtjev se šalje.

huc.connect ();

Korak 5: Provjera valjanosti veza

Korištenjem metode getResponseCode () možemo dobiti kod odgovora na zahtjev

respCode = huc.getResponseCode ();

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

ako (respCode> = 400) {System.out.println (url + "neispravna je veza");}drugo{System.out.println (url + "valjana je veza");}

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

Nadam se da će vam ovaj vodič pomoći u provjeri prekinutih veza pomoću selena.

Kako doći do SVIH veza na web stranici

Jedan od uobičajenih postupaka u web testiranju je testiranje rade li sve veze prisutne na stranici. To se može prikladno učiniti kombinacijom Java metode za svaku petlju , findElements () i By.tagName ("a") metode.

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

Kôd WebDriver u nastavku provjerava svaku vezu s početne stranice Mercury Toursa kako bi utvrdio one koji rade i one koji su još u fazi izrade.

uvoz org.openqa.selenium.By;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.chrome.ChromeDriver;import java.util.List;import java.util.concurrent.TimeUnit;uvoz org.openqa.selenium. *;javna klasa P1 {javna statička void glavna (String [] args) {String baseUrl = "http://demo.guru99.com/test/newtours/";System.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");Upravljački program WebDriver = novi ChromeDriver ();String underConsTitle = "U izradi: Mercury Tours";driver.manage (). timeouts (). implicitnoWait (5, TimeUnit.SECONDS);driver.get (baseUrl);Popis  linkElements = driver.findElements (By.tagName ("a"));String [] linkTexts = novi String [linkElements.size ()];int i = 0;// izdvajanje tekstova veza svakog elementa vezeza (WebElement e: linkElements) {linkTexts [i] = e.getText ();i ++;}// testiraj svaku vezuza (Niz t: linkTexts) {driver.findElement (By.linkText (t)). click ();if (driver.getTitle (). jednako (underConsTitle)) {System.out.println ("\" "+ t +" \ ""+ "u izradi je.");} ostalo {System.out.println ("\" "+ t +" \ ""+ "radi.");}driver.navigate (). back ();}driver.quit ();}}

Izlaz bi trebao biti sličan onome dolje navedenom.

  • Pristup vezama sa slikama vrši se metodama By.cssSelector () i By.xpath ().
  • Rješavanje problema

    U izoliranom slučaju, prva veza kojoj kôd pristupa može biti veza "Početna". U tom će slučaju akcija driver.navigate.back () prikazati praznu stranicu jer prva akcija otvara preglednik. Vozač neće moći pronaći sve ostale veze u praznom pregledniku. Dakle, IDE će izbaciti iznimku, a ostatak koda se neće izvršiti. To se lako može riješiti pomoću petlje If.