Когда вам нужно проверить все ссылки в вашем проекте, вы можете сделать это с помощью 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/worklife OK
https://www.bbc.com/travel Временно приостановил работу
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". Если вам интересно узнать о курсе подробнее, а также познакомиться с преподавателем, приглашаем на день открытых дверей онлайн.