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.
- Zberite vse povezave na spletni strani glede na oznako .
- Pošljite zahtevo HTTP za povezavo in preberite odzivno kodo HTTP.
- Na podlagi odzivne kode HTTP ugotovite, ali je povezava veljavna ali prekinjena.
- 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);Seznampovezave = 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.
Seznampovezave = driver.findElements (By.tagName ("a"));
Pridobite Iterator za prehod po seznamu.
Iteratorit = 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);SeznamlinkElements = 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.
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.