Hvad er ødelagte links?
Brudte links er links eller URL'er, der ikke kan nås. De kan være nede eller ikke fungere på grund af serverfejl
En URL vil altid have en status med 2xx, som er gyldig. Der er forskellige HTTP-statuskoder, der har forskellige formål. For en ugyldig anmodning er HTTP-status 4xx og 5xx.
4xx-klassen af statuskode er hovedsageligt til klientsidefejl, og 5xx-klassen af statuskoder er hovedsageligt til serverens svarsfejl.
Vi vil sandsynligvis ikke være i stand til at bekræfte, om dette link fungerer eller ikke, før vi klikker og bekræfter det.
Hvorfor skal du kontrollere Brudte links?
Du skal altid sørge for, at der ikke er ødelagte links på webstedet, fordi brugeren ikke skal lande på en fejlside.
Fejlen opstår, hvis reglerne ikke opdateres korrekt, eller de ønskede ressourcer ikke findes på serveren.
Manuel kontrol af links er en kedelig opgave, fordi hver webside muligvis har et stort antal links og manuel proces skal gentages for alle sider.
Et automatiseringsscript, der bruger Selen, der automatiserer processen, er en mere passende løsning.
Sådan kontrolleres de ødelagte links og billeder
For at kontrollere de ødelagte links skal du udføre følgende trin.
- Saml alle links på websiden baseret på tag.
- Send HTTP-anmodning om linket og læs HTTP-svarskode.
- Find ud af, om linket er gyldigt eller brudt baseret på HTTP-svarkode.
- Gentag dette for alle de fangede links.
Kode for at finde de ødelagte links på en webside
Nedenfor er webdriverkoden, der tester vores brugssag:
pakkeautomatiseringPraktik;importere java.io.IOException;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.util.Iterator;importere java.util.List;importer org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;offentlig klasse BrokenLinks {privat statisk WebDriver-driver = null;public static void main (String [] args) {// TODO Auto-genereret metodestubString homePage = "http://www.zlti.com";String url = "";HttpURLConnection huc = null;int respCode = 200;driver = ny ChromeDriver ();driver.manage (). vindue (). maksimere ();driver.get (homePage);Listelinks = driver.findElements (By.tagName ("a"));Iterator it = links.iterator ();mens (it.hasNext ()) {url = it.next (). getAttribute ("href");System.out.println (url);hvis (url == null || url.isEmpty ()) {System.out.println ("URL er enten ikke konfigureret til ankertag eller den er tom");Blive ved;}hvis (! url.startsWith (homePage)) {System.out.println ("URL tilhører et andet domæne, springer det over.");Blive ved;}prøve {huc = (HttpURLConnection) (ny URL (url). openConnection ());huc.setRequestMethod ("HEAD");huc.connect ();respCode = huc.getResponseCode ();hvis (respCode> = 400) {System.out.println (url + "er et brudt link");}andet{System.out.println (url + "er et gyldigt link");}} fangst (FejlformetURLException e) {// TODO Auto-genereret fangstbloke.printStackTrace ();} fangst (IOException e) {// TODO Auto-genereret fangstbloke.printStackTrace ();}}driver.quit ();}}
Forklaring af koden Eksempel
Trin 1: Importer pakker
Importer nedenstående pakke ud over standardpakker:
import java.net.HttpURLConnection;
Ved hjælp af metoderne i denne pakke kan vi sende HTTP-anmodninger og fange HTTP-svarkoder fra svaret.
Trin 2: Saml alle links på websiden
Identificer alle links på en webside, og gem dem i listen.
Listelinks = driver.findElements (By.tagName ("a"));
Få Iterator til at krydse listen.
Iteratorit = links.iterator ();
Trin 3: Identificering og validering af URL
I denne del vil vi kontrollere, om URL tilhører tredjepartsdomæne, eller om URL er tom / null.
Få href af ankermærket, og gem det i url-variablen.
url = it.next (). getAttribute ("href");
Kontroller, om URL er nul eller tom, og spring de resterende trin over, hvis betingelsen er opfyldt.
hvis (url == null || url.isEmpty ()) {System.out.println ("URL er enten ikke konfigureret til ankertag eller den er tom");Blive ved;}
Kontroller, om URL tilhører et hoveddomæne eller tredjepart. Spring de resterende trin over, hvis det tilhører tredjepartsdomæne.
hvis (! url.startsWith (homePage)) {System.out.println ("URL tilhører et andet domæne, springer det over.");Blive ved;}
Trin 4: Send http-anmodning
HttpURLConnection-klassen har metoder til at sende HTTP-anmodning og indfange HTTP-svarkode. Så output af openConnection () -metoden (URLConnection) er type støbt til HttpURLConnection.
huc = (HttpURLConnection) (ny URL (url). openConnection ());
Vi kan indstille anmodningstype som "HEAD" i stedet for "GET". Så kun headere returneres og ikke dokumenttekst.
huc.setRequestMethod ("HEAD");
Ved påkaldelse af connect () -metoden oprettes faktisk forbindelse til url, og anmodningen sendes.
huc.connect ();
Trin 5: Validering af links
Ved hjælp af getResponseCode () -metoden kan vi få svarskode til anmodningen
respCode = huc.getResponseCode ();
Baseret på svarkode vil vi prøve at kontrollere linkstatus.
hvis (respCode> = 400) {System.out.println (url + "er et brudt link");}andet{System.out.println (url + "er et gyldigt link");}
Således kan vi hente alle links fra websiden og udskrive, om links er gyldige eller brudte.
Håber denne tutorial hjælper dig med at kontrollere ødelagte links ved hjælp af selen.
Sådan får du ALLE links til en webside
En af de almindelige procedurer i webtest er at teste, om alle de links, der findes på siden, fungerer. Dette kan bekvemt gøres ved hjælp af en kombination af Java for hver loop , findElements () & By.tagName ("a") metode.
Metoden findElements () returnerer en liste over webelementer med tag a. Ved hjælp af en for hver løkke er der adgang til hvert element.
WebDriver-koden nedenfor kontrollerer hvert link fra Mercury Tours hjemmeside for at bestemme dem, der fungerer, og de der stadig er under opførelse.
importer org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.chrome.ChromeDriver;importere java.util.List;import java.util.concurrent.TimeUnit;import 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 opførelse: Mercury Tours";driver.manage (). timeouts (). implicitlyWait (5, TimeUnit.SECONDS);driver.get (baseUrl);ListelinkElements = driver.findElements (By.tagName ("a"));Streng [] linkTexts = ny streng [linkElements.size ()];int i = 0;// udtræk linkteksterne for hvert linkelementfor (WebElement e: linkElements) {linkTexts [i] = e.getText ();i ++;}// test hvert linkfor (String t: linkTexts) {driver.findElement (By.linkText (t)). klik ();hvis (driver.getTitle (). er lig med (underConsTitle)) {System.out.println ("\" "+ t +" \ ""+ "er under opførelse.");} andet {System.out.println ("\" "+ t +" \ ""+ "fungerer.");}driver.navigate (). tilbage ();}driver.quit ();}}
Outputtet skal svare til det, der er angivet nedenfor.
Fejlfinding
I et isoleret tilfælde kunne det første link, som koden tilgås, være "Hjem" -linket. I et sådant tilfælde viser driver.navigate.back () handling en tom side, da den første handling åbner en browser. Driveren kan ikke finde alle andre links i en tom browser. Så IDE kaster en undtagelse, og resten af koden udføres ikke. Dette kan let håndteres ved hjælp af en If-loop.