Kuidas leida katkisi linke Selenium
Mis on katkised lingid?
Broken links are links or URLs that are not reachable. They may be down or not functioning due to some server error
An URL will always have a status with 2xx which is valid. There are different HTTP status codes which are having different purposes. For an invalid request, HTTP status is 4xx and 5xx.
Olekukoodide klass 4xx on mรตeldud peamiselt kliendipoolse vea jaoks ja 5xx olekukoodide klass on mรตeldud peamiselt serveri vastuse vea jaoks.
Tรตenรคoliselt ei saa me kinnitada, kas see link tรถรถtab vรตi mitte, enne kui klรตpsame sellel ja kinnitame.
Miks peaksite kontrollima Katkestatud linke?
Peaksite alati veenduma, et saidil ei oleks katkisi linke, sest kasutaja ei tohiks sattuda vealehele.
Viga ilmneb siis, kui reegleid ei vรคrskendata รตigesti vรตi serveris pole nรตutud ressursse.
Linkide kรคsitsi kontrollimine on tรผรผtu รผlesanne, kuna igal veebilehel vรตib olla palju linke ja kรคsitsi protsessi tuleb korrata kรตigi lehtede puhul.
Kasutatav automatiseerimisskript Selenium mis automatiseerib protsessi, on sobivam lahendus.
Kuidas kontrollida katkiseid linke ja pilte Selenium
Katkeste linkide kontrollimiseks peate tegema jรคrgmised toimingud.
- Koguge kรตik veebilehel olevad lingid sildi alusel.
- Saatke lingi HTTP-pรคring ja lugege HTTP vastuse koodi.
- Uurige HTTP vastuse koodi pรตhjal, kas link on kehtiv vรตi katki.
- Korrake seda kรตigi jรครคdvustatud linkide puhul.
Code veebilehelt katkiste linkide leidmiseks
Allpool on veebidraiveri kood, mis testib meie kasutusjuhtu:
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();
}
}
Katkeste linkide koodi selgitamine
1. samm: importige paketid
Importige lisaks vaikepakettidele ka allolev pakett:
import java.net.HttpURLConnection;
Selle paketi meetodeid kasutades saame saata HTTP-pรคringuid ja jรครคdvustada vastusest HTTP vastuse koode.
2. samm: koguge veebilehele kรตik lingid
Tuvastage kรตik veebilehel olevad lingid ja salvestage need loendisse.
List<WebElement> links = driver.findElements(By.tagName("a"));
Hankige Iterator loendi lรคbimiseks.
Iterator<WebElement> it = links.iterator();
Step 3: Identifying and Validating URL
In this part, we will check if URL belongs to Third party domain or whether URL is empty/null.
Hankige ankrumรคrgendi href ja salvestage see url-i muutujasse.
url = it.next().getAttribute("href");
Kontrollige, kas URL is null or Empty and skip the remaining steps if the condition is satisfied.
if(url == null || url.isEmpty()){
System.out.println("URL is either not configured for anchor tag or it is empty");
continue;
}
Kontrollige, kas URL belongs to a main domain or third party. Skip the remaining steps if it belongs to third party domain.
if(!url.startsWith(homePage)){
System.out.println("URL belongs to another domain, skipping it.");
continue;
}
4. samm: saatke http-taotlus
HTTPURLConnection class has methods to send HTTP request and capture HTTP response code. So, output of openConnection() method (URLConnection) is type casted to HttpURLรhendus
huc = (HttpURLConnection)(new URL(url).openConnection());
Saame mรครคrata pรคringu tรผรผbiks "HEAD", mitte "GET". Nii et tagastatakse ainult pรคised, mitte dokumendi keha.
huc.setRequestMethod("HEAD");
Meetodi connect() kรคivitamisel luuakse tegelik รผhendus URL-iga ja pรคring saadetakse.
huc.connect();
5. samm: linkide kinnitamine
getResponse'i kasutamineCode() meetodi abil saame pรคringule vastusekoodi
respCode = huc.getResponseCode();
Vastuskoodi pรตhjal proovime lingi olekut kontrollida.
if(respCode >= 400){
System.out.println(url+" is a broken link");
}
else{
System.out.println(url+" is a valid link");
}
Seega saame veebilehelt hankida kรตik lingid ja printida, kas lingid on kehtivad vรตi katkised.
Loodetavasti aitab see รตpetus teil seleeni abil katkiste linkide kontrollimisel.
Kuidas hankida KรIK veebilehe lingid
รks levinumaid protseduure veebis Testimine on testida, kas kรตik lehel olevad lingid tรถรถtavad. Seda saab mugavalt teha, kasutades nende kombinatsiooni Java iga silmuse jaoks, leia elemente () & Autor.tagName("a") meetod.
Meetod findElements() tagastab veebielementide loendi sildiga a. Igale elemendile pรครคseb juurde iga tsรผkli abil.
Allolev WebDriveri kood kontrollib kรตiki saidi linke Mercury Ekskursioonide koduleht, et teha kindlaks need, mis tรถรถtavad ja mis 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.*;
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();
}
}
Vรคljund peaks olema sarnane allpool nรคidatud vรคljundiga.
- Juurdepรครคs pildilinkidele toimub By.cssSelector() ja By.xpath() meetodite abil.
Tรตrkeotsing
รksikjuhtudel vรตib esimene link, millele kood juurde pรครคseb, olla link "Kodu". Sellisel juhul nรคitab toiming driver.navigate.back() tรผhja lehte, kuna esimene toiming avab brauseri. Juht ei leia tรผhjast brauserist kรตiki teisi linke. Seega teeb IDE erandi ja รผlejรครคnud koodi ei kรคivitata. Seda saab hรตlpsasti kรคsitleda If-ahela abil.


.png)