Hogyan lehet megszakadt hivatkozásokat találni Selenium
⚡ Okos összefoglaló
Hibás linkek keresése Selenium A WebDriver magában foglalja az összes anchor tag összegyűjtését, és HTTP HEAD kérés küldését mindegyikhez. URL, és a válaszkód beolvasása. A 400-as vagy annál nagyobb értéket visszaadó linkeket hibásként jelöli meg a rendszer, míg az érvényes linkek 2xx kódot adnak vissza.

Mik azok a megszakadt linkek?
A hibás linkek linkek, ill. URLamelyek nem érhetők el. Lehetséges, hogy valamilyen szerverhiba miatt nem működnek vagy nem működnek.
A URL mindig 2xx állapottal fog rendelkezni, ami érvényes. Különböző HTTP állapotkódok léteznek, amelyeknek különböző céljaik vannak. Érvénytelen kérés esetén a HTTP állapot 4xx és 5xx.
A 4xx osztályú állapotkódok főként a kliensoldali hibákra, míg az 5xx osztályú állapotkódok főként a szerver válaszhibáira vonatkoznak.
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 ügyelj arra, hogy ne legyenek hibás linkek 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 manuális ellenőrzése fáradságos feladat, mivel minden weboldalon nagyszámú link lehet, és a manuális folyamatot minden oldal esetében meg kell ismételni.
Egy automatizálási szkript, amely a következőt használja: 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 a címke alapján.
- Küldj egy HTTP kérést a hivatkozásra, és olvasd be a HTTP válaszkódot.
- A HTTP válaszkód alapján állapítsd meg, hogy a hivatkozás érvényes vagy hibás-e.
- Ismételje meg ezt az összes rögzített hivatkozásra.
Code Hibás linkek keresése egy weboldalon
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 egy weboldalon, és tárolja őket egy listában.
List<WebElement> links = driver.findElements(By.tagName("a"));
Szerezz be egy iterátort a lista végigjárásához.
Iterator<WebElement> it = links.iterator();
3. lépés: Azonosítás és validálás URL
Ebben a részben azt vizsgáljuk meg, hogy a URL harmadik fél domainjéhez tartozik, vagy a URL üres/null.
Szerezd meg a horgonycímke href-jét, és tárold el az url változóban.
url = it.next().getAttribute("href");
Ellenőrizze, hogy a URL null vagy üres, és ha a feltétel teljesül, hagyja ki a fennmaradó lépéseket.
if(url == null || url.isEmpty()){ System.out.println("URL is either not configured for anchor tag or it is empty"); continue; }
Ellenőrizze, hogy a URL fő domainhez vagy harmadik félhez tartozik. Ha harmadik fél domainjéhez tartozik, hagyja ki a fennmaradó lépéseket.
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 httpURLA Connection osztály metódusai HTTP kérések küldésére és a HTTP válaszkód rögzítésére szolgálnak. Tehát az openConnection() metódus kimenete (URLA kapcsolat) típusa HTTP-re konvertálva vanURLKapcsolat.
huc = (HttpURLConnection)(new URL(url).openConnection());
A kérés típusát a „GET” helyett „HEAD”-re állíthatjuk, így csak a fejlécek kerülnek visszaadásra, a dokumentum törzse nem.
huc.setRequestMethod("HEAD");
A connect() metódus meghívásakor létrejön a tényleges kapcsolat az URL-lel, és a kérés elküldésre kerül.
huc.connect();
5. lépés: Hivatkozások ellenőrzése
A getResponse használataCode() metódussal megkaphatjuk a kérésre adott válaszkódot.
respCode = huc.getResponseCode();
A válaszkód alapján megpróbáljuk ellenőrizni a kapcsolat állapotát.
if(respCode >= 400){ System.out.println(url+" is a broken link"); } else{ System.out.println(url+" is a valid link"); }
Így egy weboldalról származó összes hivatkozást beolvashatjuk, és kinyomtathatjuk, hogy a hivatkozások érvényesek vagy hibásak.
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 a webelemek egy listáját adja vissza, amelyek tartalmazzák az „a” címkét. Egy for-each ciklus segítségével minden elemhez hozzáférünk.
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 a By.cssSelector() és a By.xpath() metódusokkal történik.
Hibaelhárítás
Egy elszigetelt esetben a kód által elért első hivatkozás lehet a „Kezdőlap” hivatkozás. Ilyen esetben a driver.navigate.back() művelet egy üres oldalt jelenít meg, mivel az első művelet egy böngésző megnyitása. A driver nem fogja megtalálni az összes többi hivatkozást egy üres böngészőben. Így az IDE kivételt dob, és a kód többi része nem fog végrehajtódni. Ez könnyen kezelhető egy If ciklussal.


.png)