Kuinka löytää rikkinäisiä linkkejä Selenium
⚡ Älykäs yhteenveto
Rikkoutuneiden linkkien löytäminen Selenium WebDriver kerää jokaisen ankkuritunnisteen ja lähettää HTTP HEAD -pyynnön jokaiselle tunnisteelle. URLja lukemalla vastauskoodin. Linkit, jotka palauttavat 400 tai suuremman arvon, merkitään rikkinäisiksi, kun taas kelvolliset linkit palauttavat 2xx-koodin.

Mitä ovat rikki linkit?
Rikkoutuneet linkit ovat linkkejä tai URLjoihin ei saada yhteyttä. Ne saattavat olla alhaalla tai eivät toimi palvelinvirheen vuoksi.
A URL on aina tilana 2xx, joka tarkoittaa kelvollisuutta. HTTP-tilakoodeja on erilaisia, ja niillä on eri tarkoitukset. Virheellisen pyynnön HTTP-tila on 4xx ja 5xx.
Tilakoodien 4xx-luokka on pääasiassa asiakaspuolen virheille ja 5xx-luokka pääasiassa palvelimen vastausvirheille.
Emme todennäköisesti pysty varmistamaan, toimiiko linkki vai ei, ennen kuin napsautamme ja vahvistamme sen.
Miksi rikkinäiset linkit kannattaa tarkistaa?
Sinun tulisi aina varmistaa, ettei sivustolla ole rikkinäisiä linkkejä, koska käyttäjän ei pitäisi päätyä virhesivulle.
Virhe tapahtuu, jos sääntöjä ei päivitetä oikein tai pyydettyjä resursseja ei ole palvelimella.
Linkkien manuaalinen tarkistaminen on työläs tehtävä, koska jokaisella verkkosivulla voi olla suuri määrä linkkejä ja manuaalinen prosessi on toistettava kaikille sivuille.
Automaatioskripti, joka käyttää Selenium joka automatisoi prosessin, on sopivampi ratkaisu.
Kuinka tarkistaa rikkinäiset linkit ja kuvat Selenium
Jos haluat tarkistaa rikkinäiset linkit, sinun on suoritettava seuraavat vaiheet.
- Kerää kaikki verkkosivun linkit tunnisteen perusteella .
- Lähetä linkkiä koskeva HTTP-pyyntö ja lue HTTP-vastauskoodi.
- Selvitä HTTP-vastauskoodin perusteella, onko linkki kelvollinen vai rikki.
- Toista tämä kaikille kaapatuille linkeille.
Code Etsi verkkosivulta rikkinäiset linkit
Alla on verkko-ohjainkoodi, joka testaa käyttötapaustamme:
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(); } }
Broken Links -koodin selittäminen
Vaihe 1: Tuo paketit
Tuo alla oleva paketti oletuspakettien lisäksi:
import java.net.HttpURLConnection;
Tämän paketin menetelmiä käyttämällä voimme lähettää HTTP-pyyntöjä ja siepata HTTP-vastauskoodeja vastauksesta.
Vaihe 2: Kerää kaikki linkit verkkosivulle
Tunnistaa kaikki verkkosivun linkit ja tallentaa ne listaan.
List<WebElement> links = driver.findElements(By.tagName("a"));
Hanki iteraattori listan läpikäymiseksi.
Iterator<WebElement> it = links.iterator();
Vaihe 3: Tunnistaminen ja validointi URL
Tässä osiossa tarkistamme, onko URL kuuluuko se kolmannen osapuolen verkkotunnukseen vai URL on tyhjä/nolla.
Hae ankkuritagin href ja tallenna se url-muuttujaan.
url = it.next().getAttribute("href");
Tarkista, onko URL on null tai tyhjä ja ohita jäljellä olevat vaiheet, jos ehto täyttyy.
if(url == null || url.isEmpty()){ System.out.println("URL is either not configured for anchor tag or it is empty"); continue; }
Tarkista, että URL kuuluu pääverkkotunnukseen tai kolmanteen osapuoleen. Ohita jäljellä olevat vaiheet, jos se kuuluu kolmannen osapuolen verkkotunnukseen.
if(!url.startsWith(homePage)){ System.out.println("URL belongs to another domain, skipping it."); continue; }
Vaihe 4: Lähetä HTTP-pyyntö
HttpURLYhteysluokalla on metodeja HTTP-pyynnön lähettämiseen ja HTTP-vastauskoodin sieppaamiseen. Joten openConnection()-metodin tuloste (URLYhteys) on tyyppivalettu Http:ksiURLYhteys.
huc = (HttpURLConnection)(new URL(url).openConnection());
Voimme asettaa pyyntötyypiksi ”HEAD” ”GET”:n sijaan, jolloin palautetaan vain otsikot eikä dokumentin runkoa.
huc.setRequestMethod("HEAD");
Kun connect()-metodia kutsutaan, varsinainen yhteys URL-osoitteeseen muodostetaan ja pyyntö lähetetään.
huc.connect();
Vaihe 5: Tarkista linkit
getResponse-funktion käyttäminenCode()-metodilla voimme saada pyynnön vastauskoodin.
respCode = huc.getResponseCode();
Vastauskoodin perusteella yritämme tarkistaa linkin tilan.
if(respCode >= 400){ System.out.println(url+" is a broken link"); } else{ System.out.println(url+" is a valid link"); }
Näin voimme hakea kaikki linkit verkkosivulta ja tulostaa, ovatko linkit kelvollisia vai rikkinäisiä.
Kuinka saada KAIKKI Web-sivun linkit
Yksi verkon yleisimmistä menetelmistä Testaus on testata, toimivatko kaikki sivulla olevat linkit. Tämä voidaan tehdä kätevästi käyttämällä näiden yhdistelmää Java jokaiselle silmukalle, etsi elementtejä () & By.tagName("a") menetelmällä.
findElements()-metodi palauttaa listan verkkoelementeistä, joiden kohdalla on tunniste a. Jokainen elementti käsitellään for-each-silmukan avulla.
Alla oleva WebDriver-koodi tarkistaa jokaisen linkin osoitteesta Mercury Tours-kotisivulla voit selvittää, mitkä toimivat ja mitkä ovat vielä rakenteilla.
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(); } }
Tulosteen tulee olla samanlainen kuin alla osoitettu.
- Kuvalinkkeihin pääsee käsiksi By.cssSelector()- ja By.xpath()-metodeilla.
Ongelmien karttoittaminen
Yksittäistapauksessa koodin ensimmäinen linkki voi olla "Koti"-linkki. Tällaisessa tapauksessa driver.navigate.back()-toiminto näyttää tyhjän sivun, koska ensimmäinen toiminto on selaimen avaaminen. Ajuri ei löydä kaikkia muita linkkejä tyhjästä selaimesta. Niinpä IDE heittää poikkeuksen, eikä loput koodista suoriteta. Tämä voidaan helposti käsitellä If-silmukan avulla.


.png)