Kuidas leida katkisi linke Selenium
⚡ Nutikas kokkuvõte
Katkiste linkide leidmine Selenium WebDriver hõlmab iga ankrusildi kogumist ja igale sildile HTTP HEAD-päringu saatmist URLja vastusekoodi lugemine. Lingid, mis tagastavad koodi 400 või rohkem, märgistatakse katkiseks, samas kui kehtivad lingid tagastavad koodi 2xx.

Mis on katkised lingid?
Katkised lingid on lingid või URLd, mis pole kättesaadavad. Need võivad serverivea tõttu maas olla või mitte töötada.
A URL on alati staatusega 2xx, mis on kehtiv. HTTP olekukoode on erinevaid, millel on erinevad eesmärgid. Kehtetu päringu korral on HTTP staatus 4xx ja 5xx.
Staatuskoodide klass 4xx on peamiselt kliendipoolse vea jaoks ja olekukoodide klass 5xx on peamiselt serveri vastuse vea jaoks.
Tõenäoliselt ei saa me kinnitada, kas see link töötab või mitte, enne kui klõpsame sellel ja kinnitame.
Miks peaksite kontrollima Katkestatud linke?
Peaksite alati veenduma, et saidil pole katkiseid linke, sest kasutaja ei tohiks sattuda vealehele.
Viga ilmneb siis, kui reegleid ei värskendata õigesti või serveris pole nõutud ressursse.
Linkide käsitsi kontrollimine on tüütu ülesanne, sest igal veebilehel võib olla suur hulk linke ja käsitsi protsessi tuleb kõigi lehtede puhul korrata.
Automatiseerimisskript, mis kasutab Selenium mis automatiseerib protsessi, on sobivam lahendus.
Kuidas kontrollida katkiseid linke ja pilte Selenium
Katkeste linkide kontrollimiseks peate tegema järgmised toimingud.
- Koguge sildi põhjal kõik veebilehel olevad lingid.
- Saatke lingile HTTP-päring ja lugege HTTP-vastuse koodi.
- HTTP vastusekoodi põhjal saate teada, kas link on kehtiv või katki.
- Korrake seda kõigi jäädvustatud linkide puhul.
Code veebilehelt katkiste linkide leidmiseks
Allpool on veebidraiveri kood, mis testib meie kasutusjuhtu:
package automationPractice; import java.io.IOException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.util.Iterator; import java.util.List; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; public class BrokenLinks { private static WebDriver driver = null; public static void main(String[] args) { // TODO Auto-generated method stub String homePage = "http://www.zlti.com"; String url = ""; HttpURLConnection huc = null; int respCode = 200; driver = new ChromeDriver(); driver.manage().window().maximize(); driver.get(homePage); List<WebElement> links = driver.findElements(By.tagName("a")); Iterator<WebElement> it = links.iterator(); while(it.hasNext()){ url = it.next().getAttribute("href"); System.out.println(url); if(url == null || url.isEmpty()){ System.out.println("URL is either not configured for anchor tag or it is empty"); continue; } if(!url.startsWith(homePage)){ System.out.println("URL belongs to another domain, skipping it."); continue; } try { huc = (HttpURLConnection)(new URL(url).openConnection()); huc.setRequestMethod("HEAD"); huc.connect(); respCode = huc.getResponseCode(); if(respCode >= 400){ System.out.println(url+" is a broken link"); } else{ System.out.println(url+" is a valid link"); } } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } driver.quit(); } }
Katkeste linkide koodi selgitamine
1. samm: importige paketid
Lisaks vaikepakettidele impordi ka allolev pakett:
import java.net.HttpURLConnection;
Selle paketi meetodeid kasutades saame saata HTTP-päringuid ja jäädvustada vastusest HTTP vastuse koode.
2. samm: koguge veebilehele kõik lingid
Tuvasta kõik veebilehel olevad lingid ja salvesta need loendisse.
List<WebElement> links = driver.findElements(By.tagName("a"));
Hankige iteraator loendi läbimiseks.
Iterator<WebElement> it = links.iterator();
3. samm: tuvastamine ja valideerimine URL
Selles osas kontrollime, kas URL kuulub kolmanda osapoole domeeni või kas URL on tühi/null.
Hankige ankrusildi href ja salvestage see URL-i muutujasse.
url = it.next().getAttribute("href");
Kontrollige, kas URL on null või tühi ja jätke ülejäänud sammud vahele, kui tingimus on täidetud.
if(url == null || url.isEmpty()){ System.out.println("URL is either not configured for anchor tag or it is empty"); continue; }
Kontrollige, kas URL kuulub põhidomeeni või kolmanda osapoole alla. Jätke ülejäänud sammud vahele, kui see kuulub kolmanda osapoole domeeni.
if(!url.startsWith(homePage)){ System.out.println("URL belongs to another domain, skipping it."); continue; }
4. samm: saatke HTTP-päring
HTTPURLÜhendusklassil on meetodid HTTP-päringu saatmiseks ja HTTP-vastuse koodi jäädvustamiseks. Seega openConnection() meetodi väljund (URLÜhendus) on tüübiks muundatud HTTP-ksURLÜhendus
huc = (HttpURLConnection)(new URL(url).openConnection());
Me võime päringu tüübiks määrata „HEAD” „GET” asemel, nii et tagastatakse ainult päised, mitte dokumendi sisu.
huc.setRequestMethod("HEAD");
Meetodi connect() käivitamisel luuakse tegelik ühendus URL-iga ja päring saadetakse ära.
huc.connect();
5. samm: linkide kinnitamine
getResponse'i kasutamineCode() meetodi abil saame päringule vastusekoodi.
respCode = huc.getResponseCode();
Vastusekoodi põhjal proovime lingi olekut kontrollida.
if(respCode >= 400){ System.out.println(url+" is a broken link"); } else{ System.out.println(url+" is a valid link"); }
Seega saame veebilehelt kõik lingid kätte ja printida, kas lingid on kehtivad või katki.
Kuidas hankida KÕIK veebilehe lingid
Üks levinumaid protseduure veebis Testimine on testida, kas kõik lehel olevad lingid töötavad. Seda saab mugavalt teha, kasutades nende kombinatsiooni Java iga silmuse jaoks, leia elemente () & Autor.tagName("a") meetod.
Meetod findElements() tagastab veebielementide loendi sildiga a. Igale elemendile pääseb ligi for-each tsükli abil.
Allolev WebDriveri kood kontrollib kõiki saidi linke Mercury Ekskursioonide koduleht, et teha kindlaks need, mis töötavad ja mis on veel ehitamisel.
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import java.util.List; import java.util.concurrent.TimeUnit; import org.openqa.selenium.*; public class P1 { public static void main(String[] args) { String baseUrl = "https://demo.guru99.com/test/newtours/"; System.setProperty("webdriver.chrome.driver", "G:\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); String underConsTitle = "Under Construction: Mercury Tours"; driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); driver.get(baseUrl); List<WebElement> linkElements = driver.findElements(By.tagName("a")); String[] linkTexts = new String[linkElements.size()]; int i = 0; //extract the link texts of each link element for (WebElement e : linkElements) { linkTexts[i] = e.getText(); i++; } //test each link for (String t : linkTexts) { driver.findElement(By.linkText(t)).click(); if (driver.getTitle().equals(underConsTitle)) { System.out.println("\"" + t + "\"" + " is under construction."); } else { System.out.println("\"" + t + "\"" + " is working."); } driver.navigate().back(); } driver.quit(); } }
Väljund peaks olema sarnane allpool näidatud väljundiga.
- Pildilinkidele pääseb ligi meetodite By.cssSelector() ja By.xpath() abil.
Tõrkeotsing
Üksikjuhul võib koodi esimene link olla link „Avaleht“. Sellisel juhul kuvab toiming driver.navigate.back() tühja lehe, kuna esimene toiming on brauseri avamine. Draiver ei leia tühjast brauserist kõiki teisi linke. Seega viskab IDE erandi ja ülejäänud kood ei käivitu. Seda saab hõlpsalt lahendada If-tsükli abil.


.png)