Как найти неработающие ссылки в Selenium
Что такое битые ссылки?
Битые ссылки — это ссылки или URLНедоступны. Возможно, они не работают или неисправны из-за ошибки сервера.
An URL Всегда будет иметь статус 2xx, что означает действительность запроса. Существуют разные коды состояния HTTP, которые имеют разное назначение. Для недействительного запроса статус HTTP равен 4xx и 5xx.
Класс кода состояния 4xx в основном предназначен для ошибок на стороне клиента, а класс кодов состояния 5xx — в основном для ошибок ответа сервера.
Скорее всего, мы не сможем подтвердить, работает ли эта ссылка или нет, пока мы не нажмем и не подтвердим ее.
Почему вам следует проверять неработающие ссылки?
Всегда следует следить за тем, чтобы на сайте не было неработающих ссылок, поскольку пользователь не должен попасть на страницу с ошибкой.
Ошибка возникает, если правила не обновлены правильно или запрошенные ресурсы отсутствуют на сервере.
Ручная проверка ссылок — утомительная задача, поскольку каждая веб-страница может иметь большое количество ссылок, и ручной процесс приходится повторять для всех страниц.
Скрипт автоматизации, использующий Selenium то, что позволит автоматизировать процесс, является более подходящим решением.
Как проверить неработающие ссылки и изображения в Selenium
Для проверки неработающих ссылок вам необходимо будет выполнить следующие шаги.
- Соберите все ссылки на веб-странице на основе тегов.
- Отправьте HTTP-запрос на ссылку и прочитайте код ответа HTTP.
- Узнайте, действительна ли ссылка или нет, на основе кода ответа HTTP.
- Повторите это для всех захваченных ссылок.
Code Найти неработающие ссылки на веб-странице
Ниже приведен код веб-драйвера, который проверяет наш вариант использования:
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 для перемещения по списку.
Iterator<WebElement> it = links.iterator();
Шаг 3: Идентификация и проверка URL
В этой части мы проверим, если URL относится к домену третьей стороны или нет URL пуст/нулевой.
Получите href тега привязки и сохраните его в переменной URL.
url = it.next().getAttribute("href");
Проверить, если URL Если условие выполняется, оно равно null или пустое, и если оно выполнено, пропустите оставшиеся шаги.
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-запрос
HttpURLКласс Connection содержит методы для отправки HTTP-запроса и захвата кода HTTP-ответа. Таким образом, вывод метода openConnection() (URLТип соединения преобразуется в HTTP.URLПодключение.
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 для каждого цикла, найтиЭлементы() & By.tagName("а") метод.
Метод findElements() возвращает список веб-элементов с тегом a. Используя цикл for-each, осуществляется доступ к каждому элементу.
Код WebDriver ниже проверяет каждую ссылку из Mercury Домашняя страница Tours, чтобы определить те, которые работают, и те, которые все еще находятся в стадии строительства.
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)