Mis on katkised lingid?
Katkised lingid on lingid või URL-id, millele pole juurdepääsu. Need võivad olla mõne serverivea tõttu maas või ei tööta
URL-il on alati kehtiv olek 2xx. On erinevaid HTTP olekukoode, millel on erinevad eesmärgid. Kehtetu päringu korral on HTTP olek 4xx ja 5xx.
4xx klassi olekukood on mõeldud peamiselt kliendipoolse vea jaoks ja 5xx klassi olekukood peamiselt serveri vastuse vea jaoks.
Tõenäoliselt ei saa me enne selle kinnitamist kinnitada, kas see link töötab või mitte.
Miks peaksite kontrollima katkisi linke?
Peaksite alati veenduma, et saidil pole katkiseid linke, kuna kasutaja ei tohiks sattuda vealehele.
Viga ilmneb siis, kui reegleid pole õigesti värskendatud või kui taotletud ressursse serveris pole.
Linkide käsitsi kontrollimine on tüütu ülesanne, sest igal veebilehel võib olla palju linke ja kõiki lehti tuleb käsitsi korrata.
Seleeni kasutav automatiseerimisskript, mis automatiseerib protsessi, on sobivam lahendus.
Kuidas kontrollida katkiseid linke ja pilte
Katkiste linkide kontrollimiseks peate tegema järgmised toimingud.
- Koguge kõik lehel olevad lingid märgendi põhjal.
- Saatke lingi jaoks HTTP-päring ja lugege HTTP-vastuskoodi.
- HTTP-vastuskoodi põhjal saate teada, kas link on kehtiv või katki.
- Korrake seda kõigi hõivatud linkide puhul.
Kood, et leida veebilehelt katkised lingid
Allpool on veebidraiveri kood, mis testib meie kasutust:
pakettide automatiseeriminePraktika;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;avalik klass BrokenLinks {privaatne staatiline WebDriveri draiver = null;public staatiline void main (String [] args) {// TODO Automaatselt loodud meetodi tüviString homePage = "http://www.zlti.com";Stringi URL = "";HttpURLConnection huc = null;int respCode = 200;draiver = uus ChromeDriver ();draiver.halda (). aken (). maksimeeri ();driver.get (homePage);Loendisselingid = driver.findElements (By.tagName ("a"));Iteraator it = lingid.iterator ();while (it.hasNext ()) {url = it.next (). getAttribute ("href");System.out.println (url);kui (url == null || url.isEmpty ()) {System.out.println ("URL pole kas ankrumärgendi jaoks konfigureeritud või on see tühi");jätkata;}if (! url.startsWith (homePage)) {System.out.println ("URL kuulub teisele domeenile, jättes selle vahele.");jätkata;}proovige {huc = (HttpURLConnection) (uus URL (url) .opConnection ());huc.setRequestMethod ("HEAD");huc.ühenda ();respCode = huc.getResponseCode ();kui (respCode> = 400) {System.out.println (URL + "on katkine link");}veel {System.out.println (URL + "on kehtiv link");}} saak (väärarengUURLException e) {// TODO Automaatselt loodud püüdeplokke.printStackTrace ();} saak (IOException e) {// TODO Automaatselt loodud püüdeplokke.printStackTrace ();}}juht.ulge ();}}
Koodi selgitamine Näide
1. samm: importige pakette
Lisaks vaikepakettidele importige pakett allpool:
import java.net.HttpURLConnection;
Selle paketi meetodite abil saame HTTP-päringuid saata ja vastusest HTTP-vastuskoode jäädvustada.
2. samm: koguge kõik veebilehe lingid
Tuvastage kõik veebilehe lingid ja salvestage need loendisse.
Loendisselingid = driver.findElements (By.tagName ("a"));
Hankige Iterator loendis liikumiseks.
Iteraatorit = lingid.iterator ();
3. samm: URL-i tuvastamine ja kinnitamine
Selles osas kontrollime, kas URL kuulub kolmanda osapoole domeenile või on URL tühi / null.
Hankige ankurmärgendi 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 toimingud vahele, kui tingimus on täidetud.
kui (url == null || url.isEmpty ()) {System.out.println ("URL pole kas ankrumärgendi jaoks konfigureeritud või on see tühi");jätkata;}
Kontrollige, kas URL kuulub põhidomeenile või kolmandale osapoolele. Jätke ülejäänud toimingud vahele, kui see kuulub kolmanda osapoole domeeni.
if (! url.startsWith (homePage)) {System.out.println ("URL kuulub teisele domeenile, jättes selle vahele.");jätkata;}
4. samm: saatke http-päring
HttpURLConnection klassil on meetodid HTTP-päringu saatmiseks ja HTTP-vastuskoodi hõivamiseks. Niisiis, meetodi openConnection () väljund (URLConnection) on tüüp HttpURLConnection.
huc = (HttpURLConnection) (uus URL (url) .opConnection ());
Saame päringu tüübiks määrata "HEAD", mitte "GET". Nii et tagastatakse ainult päised, mitte dokumendi sisu.
huc.setRequestMethod ("HEAD");
Ühenduse () meetodi käivitamisel luuakse tegelik ühendus URL-iga ja päring saadetakse.
huc.ühenda ();
5. samm: linkide kinnitamine
Meetodi getResponseCode () abil saame päringule vastuse koodi
respCode = huc.getResponseCode ();
Vastuskoodi põhjal püüame kontrollida lingi olekut.
kui (respCode> = 400) {System.out.println (URL + "on katkine link");}veel {System.out.println (URL + "on kehtiv link");}
Seega saame kõik lingid veebisaidilt hankida ja printida, kas lingid on kehtivad või katki.
Loodetavasti aitab see õpetus katkestatud linkide kontrollimisel seleeni abil.
Kuidas saada KÕIK veebilehe lingid
Veebitestimise üks levinumaid protseduure on testida, kas kõik lehel olevad lingid töötavad. Seda saab mugavalt teha, kasutades Java for-loopi , meetodi findElements ( ) ja By.tagName ("a") kombinatsiooni .
Meetod findElements () tagastab märgendiga a veebielementide loendi. Kasutades iga silmus, pääseb juurde igale elemendile.
Allpool olev WebDriveri kood kontrollib kõiki linke Mercury Toursi kodulehelt, et teha kindlaks, mis töötavad ja millised 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. *;avalik klass P1 {public staatiline void main (String [] args) {String baseUrl = "http://demo.guru99.com/test/newtours/";System.setProperty ("veebidraiver.chrome.driver", "G: \\ chromedriver.exe");WebDriveri draiver = uus ChromeDriver ();String underConsTitle = "Ehitamisel: Merkuuri tuurid";driver.manage (). timeout (). implicitlyWait (5, TimeUnit.SECONDS);draiver.get (baseUrl);LoendlinkElements = driver.findElements (By.tagName ("a"));String [] linkTexts = uus string [linkElements.size ()];int i = 0;// eraldage iga lingi elemendi lingitekstidfor (WebElement e: linkElements) {linkTexts [i] = e.getText ();i ++;}// testige iga linkifor (String t: linkTexts) {driver.findElement (By.linkText (t)). klõpsake ();if (draiver.getTitle (). võrdub (underConsTitle)) {System.out.println ("\" "+ t +" \ ""+ "on ehitamisel.");} veel {System.out.println ("\" "+ t +" \ ""+ "töötab".}juht.navigeeri (). tagasi ();}juht.ulge ();}}
Väljund peaks olema sarnane allpool näidatuga.
Häda pildistamine
Üksikjuhul võib esimene link, millele kood pääseb, olla link Kodu. Sellisel juhul kuvatakse toimingus driver.navigate.back () tühi leht, kui esimene toiming brauserit avab. Draiver ei leia kõiki muid linke tühjast brauserist. Nii et IDE loob erandi ja ülejäänud koodi ei käivitata. Seda saab hõlpsasti kasutada If-silmuse abil.