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)