Kuinka löytää kaikki / rikki linkit Selenium Webdriver -sovelluksella

Sisällysluettelo:

Anonim

Mitä ovat rikkinäiset linkit?

Katkenneet linkit ovat linkkejä tai URL-osoitteita, joihin ei ole yhteyttä. Ne voivat olla poissa käytöstä tai eivät toimi jonkin palvelinvirheen takia

URL-osoitteen tilana on aina 2xx, mikä on kelvollinen. On olemassa erilaisia ​​HTTP-tilakoodeja, joilla on eri tarkoitukset. Virheellisen pyynnön HTTP-tila on 4xx ja 5xx.

4xx-tilakoodiluokka on pääasiassa asiakaspuolen virheitä varten, ja 5xx-tilakoodiluokka on pääasiassa palvelimen vastausvirhettä varten.

Emme todennäköisesti pysty vahvistamaan, toimiiko linkki vai ei, ennen kuin napsautamme ja vahvistamme sen.

Miksi sinun pitäisi tarkistaa rikkinäiset linkit?

Varmista aina, että sivustossa ei ole rikkinäisiä linkkejä, koska käyttäjän ei tule siirtyä virhesivulle.

Virhe tapahtuu, jos sääntöjä ei päivitetä oikein tai pyydettyjä resursseja ei ole palvelimessa.

Linkkien manuaalinen tarkistus on ikävä tehtävä, koska jokaisella verkkosivulla voi olla suuri määrä linkkejä ja manuaalinen prosessi on toistettava kaikille sivuille.

Seleniumia käyttävä Automation-komentosarja, joka automatisoi prosessin, on sopivampi ratkaisu.

Kuinka tarkistaa rikkinäiset linkit ja kuvat

Rikkinäisten linkkien tarkistamiseksi sinun on tehtävä seuraavat vaiheet.

  1. Kerää kaikki verkkosivun linkit -tunnisteen perusteella.
  2. Lähetä linkin HTTP-pyyntö ja lue HTTP-vastauskoodi.
  3. Selvitä, onko linkki kelvollinen vai rikki HTTP-vastauskoodin perusteella.
  4. Toista tämä kaikille kaapatuille linkeille.

Koodi verkkosivujen rikkinäisten linkkien etsimiseen

Alla on web-ohjainkoodi, joka testaa käyttötapaustamme:

pakettien automaatioKäytäntö;tuo java.io.IOException;tuo java.net.HttpURLConnection;tuo java.net.MalformedURLException;tuo java.net.URL;tuoda java.util.Iterator;tuo java.util.List;tuo org.openqa.selenium.By;tuo org.openqa.selenium.WebDriver;tuonti org.openqa.selenium.WebElement;tuo org.openqa.selenium.chrome.ChromeDriver;julkinen luokka BrokenLinks {yksityinen staattinen WebDriver-ohjain = null;public staattinen void main (String [] argumentoi) {// TODO Automaattisesti luotu menetelmän tynkäString homePage = "http://www.zlti.com";Merkkijonon URL = "";HttpURLConnection huc = nolla;int respCode = 200;ohjain = uusi ChromeDriver ();ohjain.hallinta (). ikkuna (). maksimoi ();driver.get (homePage);Luettelo  linkeistä = driver.findElements (By.tagName ("a"));Iteraattori  it = links.iterator ();while (it.hasNext ()) {url = se.seuraava (). getAttribute ("href");System.out.println (url);if (url == null || url.isEmpty ()) {System.out.println ("URL-osoitetta ei ole määritetty ankkuritunnisteelle tai se on tyhjä");jatkaa;}if (! url.startsWith (homePage)) {System.out.println ("URL kuuluu toiseen verkkotunnukseen, ohitetaan se.");jatkaa;}yrittää {huc = (HttpURLConnection) (uusi URL (url) .openConnection ());huc.setRequestMethod ("HEAD");huc.connect ();respCode = huc.getResponseCode ();if (respCode> = 400) {System.out.println (URL + "on rikkinäinen linkki");}muu{System.out.println (URL + "on kelvollinen linkki");}} saalis (epämuodostunutURLEpoikkeus e) {// TODO Automaattisesti luotu salpalohkoe.printStackTrace ();} saalis (IOException e) {// TODO Automaattisesti luotu salpalohkoe.printStackTrace ();}}kuljettaja. lopeta ();}}

Koodin selitys Esimerkki

Vaihe 1: Tuo paketteja

Tuo paketin alapuolelle oletuspakettien lisäksi:

tuo java.net.HttpURLConnection;

Tämän paketin menetelmiä käyttämällä voimme lähettää HTTP-pyyntöjä ja siepata vastauksesta HTTP-vastauskoodeja.

Vaihe 2: Kerää kaikki verkkosivun linkit

Tunnista kaikki verkkosivun linkit ja tallenna ne luetteloon.

Luettelo  linkeistä = driver.findElements (By.tagName ("a"));

Hanki Iterator kulkemaan luettelon läpi.

Iteraattori  it = links.iterator ();

Vaihe 3: URL-osoitteen tunnistaminen ja vahvistaminen

Tässä osassa tarkistamme, kuuluuko URL kolmannen osapuolen verkkotunnukseen vai onko URL tyhjä / tyhjä.

Hanki href ankkuritunniste ja tallenna se URL-muuttujaan.

url = se.seuraava (). getAttribute ("href");

Tarkista, onko URL-osoite tyhjä tai tyhjä, ja ohita muut vaiheet, jos ehto täyttyy.

if (url == null || url.isEmpty ()) {System.out.println ("URL-osoitetta ei ole määritetty ankkuritunnisteelle tai se on tyhjä");jatkaa;}

Tarkista, kuuluuko URL pääverkkotunnukselle vai kolmannelle osapuolelle. Ohita muut vaiheet, jos se kuuluu kolmannen osapuolen verkkotunnukseen.

 if (! url.startsWith (homePage)) {System.out.println ("URL kuuluu toiseen verkkotunnukseen, ohitetaan se.");jatkaa;}

Vaihe 4: Lähetä http-pyyntö

HttpURLConnection-luokassa on tapoja lähettää HTTP-pyyntö ja siepata HTTP-vastauskoodi. Joten, openConnection () -menetelmän (URLConnection) tulos on tyyppiä valettu HttpURLConnection-tiedostoon.

huc = (HttpURLConnection) (uusi URL (url) .openConnection ());

Voimme asettaa pyynnön tyypiksi "HEAD" "GET" sijaan. Joten vain otsikot palautetaan eikä asiakirjan runko.

huc.setRequestMethod ("HEAD");

Connect () -menetelmää käytettäessä todellinen yhteys URL-osoitteeseen muodostetaan ja pyyntö lähetetään.

huc.connect ();

Vaihe 5: Vahvistetaan linkit

GetResponseCode () -menetelmän avulla voimme saada pyyntöön vastauskoodin

respCode = huc.getResponseCode ();

Vastauskoodin perusteella yritämme tarkistaa linkin tilan.

if (respCode> = 400) {System.out.println (URL + "on rikkinäinen linkki");}muu{System.out.println (URL + "on kelvollinen linkki");}

Siten voimme saada kaikki linkit verkkosivuilta ja tulostaa, ovatko linkit kelvollisia vai rikki.

Toivottavasti tämä opetusohjelma auttaa tarkistamaan rikkinäiset linkit seleenillä.

Kuinka saada KAIKKI verkkosivun linkit

Yksi verkkotestauksen yleisistä menettelyistä on testata, toimivatko kaikki sivulla olevat linkit. Tämä voidaan tehdä kätevästi yhdistämällä Java jokaiselle silmukalle , findElements () ja By.tagName ("a") -menetelmä.

FindElements () -menetelmä palauttaa luettelon verkkoelementeistä tunnisteella a. Käyttämällä jokaiselle silmukalle kutakin elementtiä käytetään.

Alla oleva WebDriver-koodi tarkistaa jokaisen linkin Mercury Tours -kotisivulta ja selvittää ne, jotka toimivat ja ovat vielä kesken.

tuo org.openqa.selenium.By;tuo org.openqa.selenium.WebDriver;tuo org.openqa.selenium.chrome.ChromeDriver;tuo java.util.List;tuo java.util.concurrent.TimeUnit;tuonti org.openqa.selenium. *;julkinen luokka P1 {public staattinen void main (String [] argumentoi) {Merkkijono baseUrl = "http://demo.guru99.com/test/newtours/";System.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");WebDriver-ohjain = uusi ChromeDriver ();String underConsTitle = "Rakenteilla: Mercury Tours";driver.manage (). aikakatkaisut (). implisiittisesti Odota (5, TimeUnit.SECONDS);driver.get (baseUrl);Luettelo  linkElements = driver.findElements (By.tagName ("a"));Merkkijono [] linkTexts = uusi merkkijono [linkElements.size ()];int i = 0;// poimi jokaisen linkki-elementin linkkitekstitkohteelle (WebElement e: linkElements) {linkTexts [i] = e.getText ();i ++;}// testaa jokainen linkkikohteelle (String t: linkTexts) {driver.findElement (By.linkText (t)). napsauta ();if (ohjain.getTitle (). on yhtä suuri (underConsTitle)) {System.out.println ("\" "+ t +" \ ""+ "on rakenteilla.");} muu {System.out.println ("\" "+ t +" \ ""+ "toimii.");}kuljettaja.navigate (). back ();}kuljettaja. lopeta ();}}

Tuloksen tulisi olla samanlainen kuin alla ilmoitettu.

  • Kuvalinkkien käyttö tapahtuu By.cssSelector () - ja By.xpath () -menetelmillä.
  • Ongelmien karttoittaminen

    Yksittäistapauksessa ensimmäinen linkki, johon koodi pääsee, voi olla "Koti" -linkki. Tällöin driver.navigate.back () -toiminto näyttää tyhjän sivun, kun ensimmäinen toiminto avaa selainta. Kuljettaja ei löydä kaikkia muita linkkejä tyhjältä selaimelta. Joten IDE heittää poikkeuksen, eikä loput koodista toteudu. Tämä voidaan helposti käsitellä If-silmukan avulla.