Kaip rasti visas / sugadintas nuorodas naudojant „Selenium Webdriver“

Turinys:

Anonim

Kas yra sugadintos nuorodos?

Nutrauktos nuorodos yra nuorodos arba URL, kurių negalima pasiekti. Jie gali neveikti arba neveikti dėl kažkokios serverio klaidos

URL visada bus galiojanti būsena su 2xx. Yra skirtingi HTTP būsenos kodai, kurie turi skirtingus tikslus. Neteisingos užklausos HTTP būsena yra 4xx ir 5xx.

„4xx“ būsenos kodo klasė daugiausia skirta kliento pusės klaidai, o „5xx“ būsenos kodų klasė daugiausia skirta serverio atsako klaidai.

Greičiausiai negalėsime patvirtinti, ar ta nuoroda veikia, ar ne, kol spustelėsime ir nepatvirtinsime.

Kodėl turėtumėte patikrinti sugadintas nuorodas?

Visada turėtumėte įsitikinti, kad svetainėje nėra sugadintų nuorodų, nes vartotojas neturėtų patekti į klaidos puslapį.

Klaida įvyksta, jei taisyklės nėra tinkamai atnaujinamos arba jei serveryje nėra reikalaujamų išteklių.

Rankinis nuorodų tikrinimas yra varginanti užduotis, nes kiekviename tinklalapyje gali būti daug nuorodų, todėl rankinis procesas turi būti kartojamas visiems puslapiams.

Automatizavimo scenarijus naudojant „Selenium“, kuris automatizuos procesą, yra tinkamesnis sprendimas.

Kaip patikrinti sugadintas nuorodas ir vaizdus

Norėdami patikrinti sugadintas nuorodas, turėsite atlikti šiuos veiksmus.

  1. Surinkite visas tinklalapio nuorodas pagal žymą .
  2. Siųskite HTTP užklausą dėl nuorodos ir perskaitykite HTTP atsakymo kodą.
  3. Remdamiesi HTTP atsakymo kodu, sužinokite, ar nuoroda galioja, ar neveikia.
  4. Pakartokite tai su visomis užfiksuotomis nuorodomis.

Kodas, skirtas tinklalapyje rasti sugadintas nuorodas

Žemiau pateikiamas žiniatinklio tvarkyklės kodas, kuris patikrina mūsų naudojimo atvejį:

paketų automatikaPraktika;importuoti java.io.IOException;importuoti java.net.HttpURLConnection;importuoti java.net.MalformedURLException;importuoti java.net.URL;importuoti java.util.Iterator;importuoti java.util.List;importuoti org.openqa.selenium.By;importuoti org.openqa.selenium.WebDriver;importuoti org.openqa.selenium.WebElement;importuoti org.openqa.selenium.chrome.ChromeDriver;viešoji klasė „BrokenLinks“ {privatus statinis „WebDriver“ tvarkyklė = nulis;public static void main (String [] argumentuoja) {// TODO Automatiškai sugeneruotas metodasString homePage = "http://www.zlti.com";Eilutės URL = "";HttpURLConnection huc = nulis;int respCode = 200;tvarkyklė = naujas „ChromeDriver“ ();vairuotojas.tvarkyti (). langas (). padidinti ();vairuotojas.get (homePage);Išvardykite  nuorodas = driver.findElements (By.tagName ("a"));Iteratorius  it = links.iterator ();while (it.hasNext ()) {url = it.next (). getAttribute ("href");System.out.println (url);jei (url == null || url.isEmpty ()) {System.out.println ("URL arba nėra sukonfigūruotas inkaro žymai, arba jis tuščias");Tęsti;}jei (! url.startsWith (homePage)) {System.out.println ("URL priklauso kitam domenui, jį praleidžiant.");Tęsti;}bandyti {huc = (HttpURLConnection) (naujas URL (url) .openConnection ());huc.setRequestMethod („GALVA“);huc.connect ();respCode = huc.getResponseCode ();jei (respCode> = 400) {System.out.println (URL + "yra sugedusi nuoroda");}Kitas{System.out.println (URL + "yra galiojanti nuoroda");}} sugavimas (netinkamai suformuotasURLException e) {// TODO Automatiškai sugeneruotas blokavimo blokase.printStackTrace ();} sugavimas (IOException e) {// TODO Automatiškai sugeneruotas blokavimo blokase.printStackTrace ();}}vairuotojas.mesti ();}}

Kodo paaiškinimas Pavyzdys

1 veiksmas: importuokite paketus

Importuoti žemiau paketą be numatytųjų paketų:

importuoti java.net.HttpURLConnection;

Naudodami šio paketo metodus, mes galime siųsti HTTP užklausas ir užfiksuoti HTTP atsakymo kodus iš atsakymo.

2 žingsnis: Surinkite visas nuorodas tinklalapyje

Nustatykite visas tinklalapio nuorodas ir išsaugokite jas sąraše.

Išvardykite  nuorodas = driver.findElements (By.tagName ("a"));

Gaukite Iterator judėti per sąrašą.

Iteratorius  it = links.iterator ();

3 žingsnis: URL nustatymas ir patvirtinimas

Šioje dalyje patikrinsime, ar URL priklauso trečiųjų šalių domenui, ar URL yra tuščias / niekinis.

Gaukite „href“ inkaro žymą ir išsaugokite ją URL kintamajame.

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

Patikrinkite, ar URL yra neteisingas arba tuščias, ir praleiskite likusius veiksmus, jei sąlyga yra įvykdyta.

jei (url == null || url.isEmpty ()) {System.out.println ("URL arba nėra sukonfigūruotas inkaro žymai, arba jis tuščias");Tęsti;}

Patikrinkite, ar URL priklauso pagrindiniam domenui, ar trečiajai šaliai. Praleiskite likusius veiksmus, jei jis priklauso trečiosios šalies domenui.

 jei (! url.startsWith (homePage)) {System.out.println ("URL priklauso kitam domenui, jį praleidžiant.");Tęsti;}

4 žingsnis: Siųskite „http“ užklausą

„HttpURLConnection“ klasėje yra metodai, kaip siųsti HTTP užklausą ir užfiksuoti HTTP atsako kodą. Taigi „openConnection“ () metodo (URLConnection) išvestis perduodama į „HttpURLConnection“.

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

Užklausos tipą galime nustatyti kaip „GALVA“, o ne „GET“. Kad būtų grąžintos tik antraštės, o ne dokumento turinys.

huc.setRequestMethod („GALVA“);

Iškviečiant connect () metodą, užmegztas faktinis ryšys su URL ir užklausa išsiunčiama.

huc.connect ();

5 veiksmas: patvirtinkite nuorodas

Naudodami getResponseCode () metodą galime gauti atsakymo kodą į užklausą

respCode = huc.getResponseCode ();

Remdamiesi atsakymo kodu, bandysime patikrinti nuorodos būseną.

jei (respCode> = 400) {System.out.println (URL + "yra sugedusi nuoroda");}Kitas{System.out.println (URL + "yra galiojanti nuoroda");}

Taigi mes galime gauti visas nuorodas iš tinklalapio ir atsispausdinti, ar nuorodos yra teisingos, ar neveikiančios.

Tikimės, kad ši pamoka padės jums patikrinti sugadintas nuorodas naudojant seleną.

Kaip gauti VISAS tinklalapio nuorodas

Viena iš įprastų žiniatinklio testavimo procedūrų yra patikrinti, ar visos puslapyje esančios nuorodos veikia. Tai galima patogiai atlikti naudojant „ Java“ kiekvienai kilpai , „ findElements ()“ ir „ By.tagName“ („a“) metodų derinį .

Metodas „findElements ()“ pateikia žiniatinklio elementų sąrašą su žyma a. Naudojant kiekvienai kilpai, pasiekiamas kiekvienas elementas.

Žemiau pateiktas „WebDriver“ kodas tikrina kiekvieną nuorodą iš „Mercury Tours“ pagrindinio puslapio, norėdamas nustatyti veikiančias ir vis dar kuriamas.

importuoti org.openqa.selenium.By;importuoti org.openqa.selenium.WebDriver;importuoti org.openqa.selenium.chrome.ChromeDriver;importuoti java.util.List;importuoti java.util.concurrent.TimeUnit;importuoti org.openqa.selenium. *;viešoji P1 klasė {public static void main (String [] argumentuoja) {Eilutė baseUrl = "http://demo.guru99.com/test/newtours/";System.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");„WebDriver“ tvarkyklė = nauja „ChromeDriver“ ();String underConsTitle = "Statoma: Mercury Tours ";vairuotojas.tvarkyti (). skirtasis laikas (). implicitlyWait (5, TimeUnit.SECONDS);vairuotojas.get (baseUrl);Išvardykite  linkElements = driver.findElements (By.tagName ("a"));Eilutė [] linkTexts = nauja eilutė [linkElements.size ()];int i = 0;// išskleisti kiekvieno nuorodos elemento nuorodos tekstusskirta („WebElement e: linkElements“)linkTexts [i] = e.getText ();i ++;}// išbandyti kiekvieną nuorodąskirta (String t: linkTexts) {driver.findElement (By.linkText (t)). spustelėkite ();if (vairuotojas.getTitle (). lygu (underConsTitle)) {System.out.println ("\" "+ t +" \ ""+ "yra kuriama.");} Kitas {System.out.println ("\" "+ t +" \ ""+ "dirba.");}vairuotojas.navigate (). back ();}vairuotojas.mesti ();}}

Išvestis turėtų būti panaši į nurodytą žemiau.

  • Vaizdo nuorodos pasiekiamos naudojant By.cssSelector () ir By.xpath () metodus.
  • Problemų sprendimas

    Atskiru atveju pirmoji nuoroda, prie kurios prieinama pagal kodą, gali būti nuoroda „Pagrindinis“. Tokiu atveju veiksmas driver.navigate.back () parodys tuščią puslapį, kai pirmasis veiksmas atidaro naršyklę. Tuščioje naršyklėje vairuotojas negalės rasti visų kitų nuorodų. Taigi IDE išmes išimtį, o likusi dalis kodo nebus vykdoma. Tai galima lengvai valdyti naudojant „If“ kilpą.