Как найти все битые ссылки на странице с помощью Selenium

от автора

Когда вам нужно проверить все ссылки в вашем проекте, вы можете сделать это с помощью Postman или любого другого инструмента тестирования API, но есть более простой способ. Когда вы используете инструменты тестирования API, вам нужно написать все соединения ссылок один за другим, а когда ссылки меняются, вам нужно снова редактировать все тесты один за другим.

Теперь с помощью этого java-кода вы можете проверить все ссылки. Эти ссылки могут быть ссылками pdf, изображения, видео или фотографии.

Шаг 1: В HTML мы связываем ссылки с помощью этого кода: <a href="Adress"></a> это означает, что мы должны собрать все ссылки на веб-странице на основе <a>. Для этого мы используем этот код:

List<WebElement> allLinks = driver.findElements(By.tagName(LINKS_TAG));

LINKS_TAG — это «a». В конце страницы я добавлю весь код.

Шаг 2: Определение и проверка URL-адреса

String urlLink = link.getAttribute(LINKS_ATTRIBUTE);

LINKS_ATTRIBUTE — это «href»

Шаг 3: Отправка HTTP-запроса и считывание кодов HTTP-ответов

Мы создаем HttpConnection с параметром URL. Я добавил также Connection Timeout.

URL url = new URL(urlLink); HttpURLConnection httpURLConnect=(HttpURLConnection)url.openConnection(); httpURLConnect.setConnectTimeout(5000); httpURLConnect.connect();
  • Информационные коды ответов: 100-199

  • Коды успешного ответа: 200-299

  • Редирект коды: 300-399

  • Коды ошибок клиента: 400-499

  • Коды ошибок сервера: 500-599

В принципе, мы можем сказать, что если код ответа больше или равен 400, то в этом случае соединение прервано.

import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.chrome.ChromeOptions; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; import java.net.HttpURLConnection; import java.net.URL; import java.util.List;   public class FindAllBrokenLinks {     public final String DRIVER_PATH = "Drivers/chromedriver";     public final String DRIVER_TYPE = "webdriver.chrome.driver";     public WebDriver driver;     public final String BASE_URL = "https://www.bbc.com/";     public final String LINKS_ATTRIBUTE = "href";     public final String LINKS_TAG = "a";      @BeforeTest     public void beforeTest(){         ChromeOptions options = new ChromeOptions();         options.addArguments("--disable-notifications","--ignore-certificate-errors","--disable-extensions");         System.setProperty(DRIVER_TYPE,DRIVER_PATH);         driver = new ChromeDriver(options);         driver.manage().window().maximize();         driver.get(BASE_URL);     }      @Test     public void FindAllBrokenLinks() throws Exception{         List<WebElement> allLinks = driver.findElements(By.tagName(LINKS_TAG));         for(WebElement link:allLinks){             try {                 String urlLink = link.getAttribute(LINKS_ATTRIBUTE);                 URL url = new URL(urlLink);                 HttpURLConnection httpURLConnect=(HttpURLConnection)url.openConnection();                 httpURLConnect.setConnectTimeout(5000);                 httpURLConnect.connect();                 if(httpURLConnect.getResponseCode()>=400)                 {                     System.out.println(urlLink+" - "+httpURLConnect.getResponseMessage()+"is a broken link");                 }                 else{                     System.out.println(urlLink+" - "+httpURLConnect.getResponseMessage());                 }             }catch (Exception e) {             }         }      }      @AfterClass     public void CloseDriver(){         driver.close();      } }

Я использовал URL веб-страницы BBC в качестве базового URL, но запуск этого кода занял 1 минуту и 49 секунд. 🙂 Возможно, вам стоит выбрать другой сайт.

Вот некоторые результаты тестов:

https://www.bbc.com/sport — OK

https://www.bbc.com/reel — OK

https://www.bbc.com/worklife — OK

https://www.bbc.com/travel — Временно приостановил работу

https://www.bbc.com/future — OK

https://www.bbc.com/culture — OK

https://www.bbc.com/culture/music — OK

http://www.bbc.co.uk/worldserviceradio/ — Не доступен

http://www.bbc.co.uk/programmes/p00wf2qw — Не доступен

https://www.bbc.com/news/world-europe-57039362 — OK


Перевод подготовлен в рамках набора учащихся на курс «Java QA Automation Engineer». Если вам интересно узнать о курсе подробнее, а также познакомиться с преподавателем, приглашаем на день открытых дверей онлайн.

ссылка на оригинал статьи https://habr.com/ru/company/otus/blog/560170/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *