Как да намерите повредени връзки в Selenium
Какво представляват повредените връзки?
Неработещите връзки са връзки или URL адреси, които не са достъпни. Те може да не работят или да не функционират поради грешка в сървъра
Един URL винаги ще има статус с 2xx, който е валиден. Има различни HTTP кодове за състояние, които имат различни цели. За невалидна заявка HTTP статусът е 4xx и 5xx.
4xx клас код за състояние е главно за грешка от страна на клиента, а 5xx клас кодове за състояние е главно за грешка в отговор на сървъра.
Най-вероятно няма да можем да потвърдим дали тази връзка работи или не, докато не щракнем и не я потвърдим.
Защо трябва да проверявате Невалидни връзки?
Винаги трябва да се уверявате, че няма повредени връзки на сайта, защото потребителят не трябва да попада на страница с грешка.
Грешката възниква, ако правилата не се актуализират правилно или заявените ресурси не съществуват на сървъра.
Ръчната проверка на връзките е досадна задача, тъй като всяка уеб страница може да има голям брой връзки и ръчният процес трябва да се повтори за всички страници.
Използване на скрипт за автоматизация Selenium което ще автоматизира процеса е по-подходящо решение.
Как да проверите повредените връзки и изображения в Selenium
За да проверите повредените връзки, ще трябва да направите следните стъпки.
- Съберете всички връзки в уеб страницата въз основа на етикет.
- Изпратете HTTP заявка за връзката и прочетете HTTP кода за отговор.
- Разберете дали връзката е валидна или повредена въз основа на HTTP кода за отговор.
- Повторете това за всички заснети връзки.
Код за намиране на повредени връзки на уеб страница
По-долу е кодът на уеб драйвера, който тества нашия случай на използване:
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();
}
}
Обяснение на кода на неработещите връзки
Стъпка 1: Импортиране на пакети
Импортирайте пакета по-долу в допълнение към пакетите по подразбиране:
import java.net.HttpURLConnection;
Използвайки методите в този пакет, можем да изпращаме HTTP заявки и да улавяме кодовете на HTTP отговор от отговора.
Стъпка 2: Съберете всички връзки в уеб страницата
Идентифицирайте всички връзки в уеб страница и ги съхранявайте в списък.
List<WebElement> links = driver.findElements(By.tagName("a"));
Получете итератор за преминаване през списъка.
Iterator<WebElement> it = links.iterator();
Стъпка 3: Идентифициране и валидиране на URL
В тази част ще проверим дали URL адресът принадлежи към домейн на трета страна или дали URL адресът е празен/нулев.
Вземете href на anchor таг и го съхранете в url променлива.
url = it.next().getAttribute("href");
Проверете дали URL адресът е празен или празен и пропуснете останалите стъпки, ако условието е изпълнено.
if(url == null || url.isEmpty()){
System.out.println("URL is either not configured for anchor tag or it is empty");
continue;
}
Проверете дали URL принадлежи на основен домейн или на трета страна. Пропуснете останалите стъпки, ако принадлежи на домейн на трета страна.
if(!url.startsWith(homePage)){
System.out.println("URL belongs to another domain, skipping it.");
continue;
}
Стъпка 4: Изпратете http заявка
Класът HttpURLConnection има методи за изпращане на HTTP заявка и улавяне на код на HTTP отговор. И така, изходът на метода openConnection() (URLConnection) е преобразуван от типа към HttpURLConnection.
huc = (HttpURLConnection)(new URL(url).openConnection());
Можем да зададем тип заявка като „HEAD“ вместо „GET“. Така че се връщат само заглавки, а не тялото на документа.
huc.setRequestMethod("HEAD");
При извикване на метода connect() се установява действителна връзка с url и заявката се изпраща.
huc.connect();
Стъпка 5: Проверка на връзките
Използвайки метода getResponseCode(), можем да получим код на отговор за заявката
respCode = huc.getResponseCode();
Въз основа на кода за отговор ще се опитаме да проверим състоянието на връзката.
if(respCode >= 400){
System.out.println(url+" is a broken link");
}
else{
System.out.println(url+" is a valid link");
}
По този начин можем да получим всички връзки от уеб страницата и да отпечатаме дали връзките са валидни или повредени.
Надяваме се, че този урок ви помага при проверката на повредени връзки с помощта на селен.
Как да получите ВСИЧКИ връзки на уеб страница
Една от често срещаните процедури в мрежата Тестване е да се тества дали всички връзки в страницата работят. Това може удобно да се направи с помощта на комбинация от Java за всеки цикъл, findElements() & By.tagName("a") метод.
Методът findElements() връща списък с уеб елементи с етикет a. С помощта на цикъл for-each се осъществява достъп до всеки елемент.
Кодът на WebDriver по-долу проверява всяка връзка от Mercury Обиколки на началната страница, за да определите тези, които работят и тези, които все още са в процес на изграждане.
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();
}
}
Резултатът трябва да е подобен на посочения по-долу.
- Достъпът до връзките към изображения се извършва чрез методите By.cssSelector() и By.xpath().
Отстраняване на неизправности
В изолиран случай първата връзка, достъпна от кода, може да бъде връзката „Начало“. В такъв случай действието driver.navigate.back() ще покаже празна страница, тъй като първото действие е отваряне на браузър. Драйверът няма да може да намери всички други връзки в празен браузър. Така IDE ще хвърли изключение и останалата част от кода няма да се изпълни. Това може лесно да се справи с помощта на If цикъл.


.png)