Что такое неработающие ссылки?
Неработающие ссылки - это ссылки или URL-адреса, которые недоступны. Они могут не работать или не работать из-за ошибки сервера.
URL-адрес всегда будет иметь статус 2xx, который является действительным. Существуют разные коды состояния HTTP, которые имеют разные цели. Для недействительного запроса статус HTTP - 4xx и 5xx.
Класс кода состояния 4xx в основном предназначен для ошибки на стороне клиента, а класс кодов состояния 5xx в основном предназначен для ошибки ответа сервера.
Скорее всего, мы не сможем подтвердить, работает эта ссылка или нет, пока не нажмем и не подтвердим ее.
Почему вы должны проверять неработающие ссылки?
Вы всегда должны следить за тем, чтобы на сайте не было неработающих ссылок, потому что пользователь не должен попасть на страницу с ошибкой.
Ошибка возникает, если правила не обновлены правильно или запрошенные ресурсы отсутствуют на сервере.
Ручная проверка ссылок - утомительная задача, потому что на каждой веб-странице может быть большое количество ссылок, и ручной процесс должен повторяться для всех страниц.
Сценарий автоматизации с использованием Selenium, который автоматизирует процесс, является более подходящим решением.
Как проверить неработающие ссылки и изображения
Для проверки неработающих ссылок вам нужно будет проделать следующие шаги.
- Соберите все ссылки на веб-странице на основе тега .
- Отправьте HTTP-запрос на ссылку и прочтите код HTTP-ответа.
- Узнайте, действительна ли ссылка или не работает, на основе кода ответа HTTP.
- Повторите это для всех захваченных ссылок.
Код для поиска неработающих ссылок на веб-странице
Ниже приведен код веб-драйвера, который проверяет наш вариант использования:
пакет автоматизацииПрактика;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 {частный статический драйвер WebDriver = null;public static void main (String [] args) {// TODO Заглушка автоматически сгенерированного методаСтрока homePage = "http://www.zlti.com";Строка url = "";HttpURLConnection huc = null;int respCode = 200;драйвер = новый ChromeDriver ();driver.manage (). window (). maximize ();driver.get (домашняя страница);Список ссылок= driver.findElements (By.tagName ("a"));Итератор it = links.iterator ();while (it.hasNext ()) {url = it.next (). getAttribute ("href");System.out.println (URL);if (url == null || url.isEmpty ()) {System.out.println («URL либо не настроен для тега привязки, либо пуст»);Продолжить;}if (! url.startsWith (homePage)) {System.out.println («URL принадлежит другому домену, пропуская его.»);Продолжить;}пытаться {huc = (HttpURLConnection) (новый URL (url) .openConnection ());huc.setRequestMethod ("ГОЛОВА");huc.connect ();respCode = huc.getResponseCode ();if (respCode> = 400) {System.out.println (url + "неработающая ссылка");}еще{System.out.println (url + "действительная ссылка");}} catch (MalformedURLException e) {// TODO Автоматически сгенерированный блок catche.printStackTrace ();} catch (IOException e) {// TODO Автоматически сгенерированный блок catche.printStackTrace ();}}driver.quit ();}}
Объяснение примера кода
Шаг 1. Импортируйте пакеты
Импортируйте следующий пакет в дополнение к пакетам по умолчанию:
import java.net.HttpURLConnection;
Используя методы в этом пакете, мы можем отправлять HTTP-запросы и захватывать HTTP-коды ответа из ответа.
Шаг 2. Соберите все ссылки на веб-странице
Определите все ссылки на веб-странице и сохраните их в списке.
Список ссылок= driver.findElements (By.tagName ("a"));
Получите Iterator для перемещения по списку.
Итераторit = links.iterator ();
Шаг 3. Определение и проверка URL
В этой части мы проверим, принадлежит ли URL-адрес Стороннему домену или является ли URL-адрес пустым / нулевым.
Получите href тега привязки и сохраните его в переменной url.
url = it.next (). getAttribute ("href");
Проверьте, является ли URL-адрес пустым или пустым, и пропустите оставшиеся шаги, если условие выполнено.
if (url == null || url.isEmpty ()) {System.out.println («URL либо не настроен для тега привязки, либо пуст»);Продолжить;}
Проверьте, принадлежит ли URL-адрес основному домену или третьему лицу. Пропустите оставшиеся шаги, если он принадлежит стороннему домену.
if (! url.startsWith (homePage)) {System.out.println («URL принадлежит другому домену, пропуская его.»);Продолжить;}
Шаг 4. Отправьте http-запрос
Класс HttpURLConnection имеет методы для отправки HTTP-запроса и захвата кода HTTP-ответа. Итак, вывод метода openConnection () (URLConnection) - это тип, приведенный к HttpURLConnection.
huc = (HttpURLConnection) (новый URL (url) .openConnection ());
Мы можем установить тип запроса как «HEAD» вместо «GET». Так что возвращаются только заголовки, а не тело документа.
huc.setRequestMethod ("ГОЛОВА");
При вызове метода connect () устанавливается фактическое соединение с url-адресом и отправляется запрос.
huc.connect ();
Шаг 5. Проверка ссылок
Используя метод getResponseCode (), мы можем получить код ответа на запрос
respCode = huc.getResponseCode ();
На основании кода ответа мы попытаемся проверить статус ссылки.
if (respCode> = 400) {System.out.println (url + "неработающая ссылка");}еще{System.out.println (url + "действительная ссылка");}
Таким образом, мы можем получить все ссылки с веб-страницы и распечатать, действительны ли ссылки или нет.
Надеюсь, это руководство поможет вам проверить неработающие ссылки с помощью селена.
Как получить ВСЕ ссылки на веб-странице
Одна из распространенных процедур веб-тестирования - проверить, все ли ссылки на странице работают. Это удобно сделать, используя комбинацию Java для каждого цикла , метода findElements () и By.tagName ("a") .
Метод 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) {Строка baseUrl = "http://demo.guru99.com/test/newtours/";System.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");Драйвер WebDriver = новый ChromeDriver ();String underConsTitle = "В разработке: Mercury Tours";driver.manage (). timeouts (). implicitlyWait (5, TimeUnit.SECONDS);driver.get (baseUrl);СписокlinkElements = driver.findElements (By.tagName ("a"));Строка [] linkTexts = новая строка [linkElements.size ()];int я = 0;// извлекаем тексты ссылок каждого элемента ссылкидля (WebElement e: linkElements) {linkTexts [i] = e.getText ();i ++;}// проверяем каждую ссылкуfor (String t: linkTexts) {driver.findElement (By.linkText (t)). click ();if (driver.getTitle (). equals (underConsTitle)) {System.out.println ("\" "+ t +" \ ""+ "в разработке.");} еще {System.out.println ("\" "+ t +" \ ""+ "работает.");}driver.navigate (). назад ();}driver.quit ();}}
Результат должен быть похож на тот, что указан ниже.
Исправление проблем
В единичном случае первой ссылкой, к которой обращается код, может быть ссылка «Домашняя». В таком случае действие driver.navigate.back () покажет пустую страницу, поскольку первое действие открывает браузер. Драйвер не сможет найти все остальные ссылки в пустом браузере. Таким образом, IDE выдаст исключение, а остальная часть кода не будет выполнена. С этим легко справиться с помощью цикла If.