Hva er ødelagte lenker?
Brutte lenker er lenker eller nettadresser som ikke er tilgjengelige. De kan være nede eller ikke fungere på grunn av noen serverfeil
En URL vil alltid ha en status med 2xx som er gyldig. Det er forskjellige HTTP-statuskoder som har forskjellige formål. For en ugyldig forespørsel er HTTP-status 4xx og 5xx.
4xx-klassen med statuskode er hovedsakelig for feil på klientsiden, og 5xx-klassen av statuskoder er hovedsakelig for serverresponsfeilen.
Vi vil mest sannsynlig ikke kunne bekrefte om denne lenken fungerer eller ikke før vi klikker og bekrefter den.
Hvorfor bør du sjekke ødelagte lenker?
Du bør alltid sørge for at det ikke er ødelagte lenker på nettstedet fordi brukeren ikke skal lande på en feilside.
Feilen oppstår hvis reglene ikke oppdateres riktig, eller hvis de forespurte ressursene ikke eksisterer på serveren.
Manuell kontroll av lenker er en kjedelig oppgave, fordi hver webside kan ha et stort antall lenker og manuell prosess må gjentas for alle sider.
Et automatiseringsskript som bruker Selen som vil automatisere prosessen, er en mer passende løsning.
Hvordan sjekke de ødelagte koblingene og bildene
For å sjekke de ødelagte koblingene, må du gjøre følgende trinn.
- Samle alle lenkene på websiden basert på tag.
- Send HTTP-forespørsel om lenken og les HTTP-svarskode.
- Finn ut om lenken er gyldig eller ødelagt basert på HTTP-responskode.
- Gjenta dette for alle fangede lenker.
Kode for å finne de ødelagte koblingene på en webside
Nedenfor er nettdriverkoden som tester bruken av saken:
automatisering av pakkerimportere java.io.IOException;importere java.net.HttpURLConnection;importer java.net.MalformedURLException;importere java.net.URL;importere java.util.Iterator;importere java.util.List;importer org.openqa.selenium.By;importer org.openqa.selenium.WebDriver;importer org.openqa.selenium.WebElement;importer org.openqa.selenium.chrome.ChromeDriver;offentlig klasse BrokenLinks {privat statisk WebDriver-driver = null;public static void main (String [] args) {// TODO Auto-generert metodestubString homePage = "http://www.zlti.com";String url = "";HttpURLConnection huc = null;int respCode = 200;driver = ny ChromeDriver ();driver.manage (). vindu (). maksimere ();driver.get (homePage);Listelenker = driver.findElements (By.tagName ("a"));Iterator it = links.iterator ();while (it.hasNext ()) {url = it.next (). getAttribute ("href");System.out.println (url);hvis (url == null || url.isEmpty ()) {System.out.println ("URL er enten ikke konfigurert for ankerkode eller den er tom");Fortsette;}hvis (! url.startsWith (homePage)) {System.out.println ("URL tilhører et annet domene, hopper over det.");Fortsette;}prøv {huc = (HttpURLConnection) (ny URL (url). openConnection ());huc.setRequestMethod ("HEAD");huc.connect ();respCode = huc.getResponseCode ();hvis (respCode> = 400) {System.out.println (url + "er en ødelagt lenke");}ellers{System.out.println (url + "er en gyldig lenke");}} fangst (MalformedURLException e) {// TODO Auto-generert fangstblokke.printStackTrace ();} fangst (IOException e) {// TODO Auto-generert fangstblokke.printStackTrace ();}}driver.quit ();}}
Forklaring av koden Eksempel
Trinn 1: Importer pakker
Importer under pakken i tillegg til standardpakker:
importere java.net.HttpURLConnection;
Ved hjelp av metodene i denne pakken kan vi sende HTTP-forespørsler og fange HTTP-svarskoder fra svaret.
Trinn 2: Samle alle koblinger på websiden
Identifiser alle koblinger på en webside og lagre dem i List.
Listelenker = driver.findElements (By.tagName ("a"));
Få Iterator til å krysse gjennom listen.
Iteratorit = links.iterator ();
Trinn 3: Identifisere og validere URL
I denne delen vil vi sjekke om URL tilhører tredjepartsdomene eller om URL er tom / null.
Få href av ankermerke og lagre den i url-variabel.
url = it.next (). getAttribute ("href");
Sjekk om URL er null eller tom, og hopp over de gjenværende trinnene hvis betingelsen er oppfylt.
hvis (url == null || url.isEmpty ()) {System.out.println ("URL er enten ikke konfigurert for ankerkode eller den er tom");Fortsette;}
Sjekk om URL tilhører et hoveddomene eller tredjepart. Hopp over de gjenværende trinnene hvis det tilhører tredjepartsdomenet.
hvis (! url.startsWith (homePage)) {System.out.println ("URL tilhører et annet domene, hopper over det.");Fortsette;}
Trinn 4: Send http-forespørsel
HttpURLConnection-klassen har metoder for å sende HTTP-forespørsel og fange HTTP-svarskode. Så, utdata fra openConnection () -metoden (URLConnection) er type kastet til HttpURLConnection.
huc = (HttpURLConnection) (ny URL (url). openConnection ());
Vi kan sette forespørselstype som "HEAD" i stedet for "GET". Slik at bare overskrifter returneres og ikke dokumentet.
huc.setRequestMethod ("HEAD");
Ved å påkalle connect () -metoden blir faktisk forbindelse til url etablert og forespørselen sendt.
huc.connect ();
Trinn 5: Validering av koblinger
Ved hjelp av getResponseCode () -metoden kan vi få svarskode for forespørselen
respCode = huc.getResponseCode ();
Basert på svarskoden vil vi prøve å sjekke koblingsstatus.
hvis (respCode> = 400) {System.out.println (url + "er en ødelagt lenke");}ellers{System.out.println (url + "er en gyldig lenke");}
Dermed kan vi få alle lenker fra nettsiden og skrive ut om lenker er gyldige eller ødelagte.
Håper denne opplæringen hjelper deg med å sjekke ødelagte lenker ved hjelp av selen.
Hvordan få ALLE koblinger til en webside
En av de vanlige prosedyrene i nettesting er å teste om alle lenkene på siden fungerer. Dette kan enkelt gjøres ved å bruke en kombinasjon av Java for hver loop , findElements () & By.tagName ("a") -metoden.
Metoden findElements () returnerer en liste over webelementer med tag a. Ved hjelp av en for-hver løkke får du tilgang til hvert element.
WebDriver-koden nedenfor sjekker hver lenke fra Mercury Tours hjemmeside for å bestemme de som fungerer og de som fortsatt er under konstruksjon.
importer org.openqa.selenium.By;importer org.openqa.selenium.WebDriver;importer org.openqa.selenium.chrome.ChromeDriver;importere java.util.List;importere java.util.concurrent.TimeUnit;importer org.openqa.selenium. *;offentlig klasse P1 {public static void main (String [] args) {Streng baseUrl = "http://demo.guru99.com/test/newtours/";System.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");WebDriver driver = ny ChromeDriver ();String underConsTitle = "Under konstruksjon: Merkur-turer";driver.manage (). timeouts (). implicitWait (5, TimeUnit.SECONDS);driver.get (baseUrl);ListelinkElements = driver.findElements (By.tagName ("a"));Streng [] linkTexts = ny streng [linkElements.size ()];int i = 0;// trekk ut linktekstene til hvert koblingselementfor (WebElement e: linkElements) {linkTexts [i] = e.getText ();i ++;}// test hver lenkefor (String t: linkTexts) {driver.findElement (By.linkText (t)). klikk ();hvis (driver.getTitle (). er lik (underConsTitle)) {System.out.println ("\" "+ t +" \ ""+ "er under konstruksjon.");} annet {System.out.println ("\" "+ t +" \ ""+ "fungerer.");}driver.navigate (). tilbake ();}driver.quit ();}}
Utgangen skal være lik den som er angitt nedenfor.
Feilsøking
I et enkelt tilfelle kan den første lenken som koden får tilgang til, være "Hjem" -lenken. I slike tilfeller vil driver.navigate.back () -handling vise en tom side når den første handlingen åpner en nettleser. Driveren vil ikke kunne finne alle andre lenker i en tom nettleser. Så IDE vil kaste et unntak, og resten av koden vil ikke kjøres. Dette kan enkelt håndteres ved hjelp av en If-løkke.