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.
- Surinkite visas tinklalapio nuorodas pagal žymą .
- Siųskite HTTP užklausą dėl nuorodos ir perskaitykite HTTP atsakymo kodą.
- Remdamiesi HTTP atsakymo kodu, sužinokite, ar nuoroda galioja, ar neveikia.
- 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švardykitenuorodas = 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švardykitenuorodas = driver.findElements (By.tagName ("a"));
Gaukite Iterator judėti per sąrašą.
Iteratoriusit = 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švardykitelinkElements = 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.
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ą.