Hogyan lehet megszakadt hivatkozásokat találni Selenium
Mik azok a megszakadt linkek?
A hibás hivatkozások olyan linkek vagy URL-ek, amelyek nem érhetők el. Előfordulhat, hogy nem működnek, vagy valamilyen szerverhiba miatt nem működnek
Az URL állapota mindig 2xx lesz, amely érvényes. Különböző HTTP-állapotkódok léteznek, amelyek különböző célokat szolgálnak. Érvénytelen kérés esetén a HTTP állapota 4xx és 5xx.
A 4xx osztályú állapotkód főként a kliens oldali hibára, az 5xx osztályú állapotkód pedig főleg a szerver válaszhibájára vonatkozik.
Valószínűleg nem tudjuk megerősíteni, hogy a link működik-e vagy sem, amíg rá nem kattintunk és megerősítjük.
Miért érdemes ellenőrizni a megszakadt linkeket?
Mindig ügyeljen arra, hogy ne legyenek hibás hivatkozások az oldalon, mert a felhasználónak nem szabad hibaoldalra kerülnie.
A hiba akkor fordul elő, ha a szabályok nem megfelelően frissülnek, vagy a kért erőforrások nem léteznek a kiszolgálón.
A linkek kézi ellenőrzése fárasztó feladat, mert minden weboldalon nagyszámú hivatkozás lehet, és a manuális folyamatot minden oldalon meg kell ismételni.
Egy automatizálási szkriptet használ Selenium amely automatizálja a folyamatot, megfelelőbb megoldás.
Hogyan lehet ellenőrizni a megszakadt hivatkozásokat és képeket Selenium
A hibás hivatkozások ellenőrzéséhez a következő lépéseket kell végrehajtania.
- Gyűjtsd össze az összes linket a weboldalon címke alapján.
- HTTP-kérelem küldése a hivatkozásra, és olvassa el a HTTP-válaszkódot.
- A HTTP-válaszkód alapján megtudhatja, hogy a hivatkozás érvényes-e vagy hibás-e.
- Ismételje meg ezt az összes rögzített hivatkozásra.
Kód a weboldal megszakadt hivatkozásainak megtalálásához
Az alábbiakban a web-illesztőprogram kódja található, amely teszteli a használati esetünket:
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(); } }
A Broken Links kódjának magyarázata
1. lépés: Csomagok importálása
Importálja az alábbi csomagot az alapértelmezett csomagok mellett:
import java.net.HttpURLConnection;
A csomagban található metódusok segítségével HTTP kéréseket küldhetünk, és HTTP válaszkódokat rögzíthetünk a válaszból.
2. lépés: Gyűjtsd össze az összes hivatkozást a weboldalon
Azonosítsa az összes hivatkozást a weboldalon, és tárolja azokat a listában.
List<WebElement> links = driver.findElements(By.tagName("a"));
Szerezze be az Iteratort, hogy áthaladjon a listán.
Iterator<WebElement> it = links.iterator();
3. lépés: Az URL azonosítása és ellenőrzése
Ebben a részben megvizsgáljuk, hogy az URL harmadik fél domainhez tartozik-e, vagy az URL üres/null.
Szerezze le a horgonycímke href-jét, és tárolja az url változóban.
url = it.next().getAttribute("href");
Ellenőrizze, hogy az URL üres-e vagy üres, és hagyja ki a többi lépést, ha a feltétel teljesül.
if(url == null || url.isEmpty()){ System.out.println("URL is either not configured for anchor tag or it is empty"); continue; }
Ellenőrizze, hogy az URL fő domainhez vagy harmadik félhez tartozik-e. Hagyja ki a többi lépést, ha harmadik fél domainjéhez tartozik.
if(!url.startsWith(homePage)){ System.out.println("URL belongs to another domain, skipping it."); continue; }
4. lépés: http-kérés küldése
A HttpURLConnection osztálynak vannak metódusai a HTTP-kérés küldésére és a HTTP-válaszkód rögzítésére. Tehát az openConnection() metódus (URLConnection) kimenete a HttpURLConnection fájlba kerül.
huc = (HttpURLConnection)(new URL(url).openConnection());
Beállíthatjuk a kérés típusát a „HEAD” értékre a „GET” helyett. Így csak a fejlécek jelennek meg, és nem a dokumentumtörzs.
huc.setRequestMethod("HEAD");
A connect() metódus meghívásakor létrejön a tényleges kapcsolat az url-lel, és elküldésre kerül a kérés.
huc.connect();
5. lépés: Hivatkozások ellenőrzése
A getResponseCode() metódus segítségével válaszkódot kaphatunk a kéréshez
respCode = huc.getResponseCode();
A válaszkód alapján megpróbáljuk ellenőrizni a link állapotát.
if(respCode >= 400){ System.out.println(url+" is a broken link"); } else{ System.out.println(url+" is a valid link"); }
Így az összes linket megkaphatjuk a weboldalról, és kinyomtathatjuk, hogy a linkek érvényesek vagy hibásak.
Remélhetőleg ez az oktatóanyag segít a megszakadt hivatkozások szelén használatával történő ellenőrzésében.
Hogyan szerezhető be egy weboldal ÖSSZES hivatkozása
A weben elterjedt eljárások egyike Tesztelés annak tesztelése, hogy az oldalon található összes hivatkozás működik-e. Ez kényelmesen megtehető a következők kombinációjával Java minden hurok számára, FindElements() & By.tagName("a") módszer.
A findElements() metódus az a címkével rendelkező webelemek listáját adja vissza. Egy for-each ciklus használatával minden elem elérhető.
Az alábbi WebDriver kód minden hivatkozást ellenőrzi a Mercury A Tours honlapja annak meghatározására, hogy melyek működnek és melyek még építés alatt állnak.
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(); } }
A kimenetnek hasonlónak kell lennie az alább jelzetthez.
- A képhivatkozások elérése By.cssSelector() és By.xpath() metódusokkal történik.
Hibaelhárítás
Elszigetelt esetben a kód által elért első hivatkozás a „Home” hivatkozás lehet. Ebben az esetben a driver.navigate.back() művelet egy üres oldalt jelenít meg, mivel az első művelet a böngésző megnyitása. Az illesztőprogram nem fogja tudni megtalálni az összes többi hivatkozást egy üres böngészőben. Tehát az IDE kivételt dob, és a kód többi része nem fut le. Ez könnyen kezelhető egy If hurok segítségével.