Що таке непрацюючі посилання?
Порушені посилання - це посилання або URL-адреси, до яких недоступні. Вони можуть не працювати або не функціонувати через якусь помилку сервера
URL завжди матиме статус 2xx, який є дійсним. Існують різні коди статусу HTTP, які мають різне призначення. Для недійсного запиту статус HTTP становить 4xx та 5xx.
Клас коду стану 4xx в основному стосується помилок на стороні клієнта, а клас кодів стану 5xx - в основному для помилок відповіді сервера.
Швидше за все, ми не зможемо підтвердити, чи працює це посилання чи ні, поки ми не натиснемо та не підтвердимо його.
Чому ви повинні перевірити непрацюючі посилання?
Завжди слід переконуватись, що на сайті немає пошкоджених посилань, оскільки користувач не повинен потрапляти на сторінку помилки.
Помилка трапляється, якщо правила не оновлюються належним чином або запитані ресурси відсутні на сервері.
Перевірка посилань вручну є нудним завданням, оскільки кожна веб-сторінка може мати велику кількість посилань, і ручний процес повинен повторюватися для всіх сторінок.
Сценарій автоматизації, що використовує Selenium, який автоматизує процес, є більш влучним рішенням.
Як перевірити непрацюючі посилання та зображення
Для перевірки непрацюючих посилань вам потрібно буде виконати наступні кроки.
- Зберіть усі посилання на веб-сторінці на основі тегу .
- Надішліть HTTP-запит на посилання та прочитайте код відповіді HTTP.
- На основі коду відповіді HTTP з’ясуйте, чи є посилання дійсним чи непрацюючим.
- Повторіть це для всіх захоплених посилань.
Код для пошуку пошкоджених посилань на веб-сторінці
Нижче наведено код веб-драйвера, який перевіряє наш варіант використання:
автоматизація пакетівPractice;імпортувати java.io.IOException;імпортувати java.net.HttpURLConnection;імпортувати java.net.MalformedURLException;імпортувати java.net.URL;імпортувати java.util.Iterator;імпортувати java.util.List;імпорт org.openqa.selenium.By;імпорт org.openqa.selenium.WebDriver;імпорт org.openqa.selenium.WebElement;імпорт org.openqa.selenium.chrome.ChromeDriver;публічний клас 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 (homePage);Списокпосилань = 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 ("HEAD");huc.connect ();respCode = huc.getResponseCode ();якщо (respCode> = 400) {System.out.println (url + "непрацююче посилання");}ще {System.out.println (url + "є дійсним посиланням");}} catch (MalformedURLException e) {// TODO Автогенерований блок ловуe.printStackTrace ();} catch (IOException e) {// TODO Автогенерований блок ловуe.printStackTrace ();}}driver.quit ();}}
Пояснення коду Приклад
Крок 1: Імпорт пакетів
Імпортуйте пакет нижче на додаток до пакетів за замовчуванням:
імпортувати java.net.HttpURLConnection;
Використовуючи методи цього пакету, ми можемо надсилати запити HTTP та захоплювати коди відповідей HTTP із відповіді.
Крок 2: Зберіть усі посилання на веб-сторінці
Визначте всі посилання на веб-сторінці та збережіть їх у списку.
Списокпосилань = driver.findElements (By.tagName ("a"));
Отримайте Ітератор для обходу списку.
Ітератор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 ("HEAD");
При виклику методу connect () встановлюється фактичне підключення до url-адреси та надсилається запит.
huc.connect ();
Крок 5: Перевірка посилань
За допомогою методу getResponseCode () ми можемо отримати код відповіді на запит
respCode = huc.getResponseCode ();
На основі коду відповіді ми спробуємо перевірити стан посилання.
якщо (respCode> = 400) {System.out.println (url + "непрацююче посилання");}ще {System.out.println (url + "є дійсним посиланням");}
Таким чином, ми можемо отримати всі посилання з веб-сторінки та надрукувати, чи є посилання дійсними чи зламаними.
Сподіваюся, цей підручник допоможе вам у перевірці непрацюючих посилань із використанням селену.
Як отримати ВСІ посилання на веб-сторінку
Однією із найпоширеніших процедур веб-тестування є перевірка того, чи працюють усі посилання на сторінці. Це можна зручно зробити, використовуючи комбінацію Java для кожного циклу , методу findElements () та By.tagName ("a") .
Метод findElements () повертає список веб-елементів з тегом a. За допомогою циклу for для кожного здійснюється доступ до кожного елемента.
Наведений нижче код WebDriver перевіряє кожне посилання на домашній сторінці Mercury Tours для визначення тих, що працюють, і тих, що ще перебувають у стадії розробки.
імпорт org.openqa.selenium.By;імпорт org.openqa.selenium.WebDriver;імпорт org.openqa.selenium.chrome.ChromeDriver;імпортувати java.util.List;імпортувати java.util.concurrent.TimeUnit;імпорт org.openqa.selenium. *;публічний клас 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 = "На стадії розробки: Ртутні тури";driver.manage (). timeouts (). неявноWait (5, TimeUnit.SECONDS);драйвер.get (baseUrl);СписокlinkElements = driver.findElements (By.tagName ("a"));String [] linkTexts = new String [linkElements.size ()];int i = 0;// витягуємо тексти посилань кожного елемента посиланнядля (WebElement e: linkElements) {linkTexts [i] = e.getText ();i ++;}// протестуємо кожне посиланнядля (рядок t: linkTexts) {driver.findElement (By.linkText (t)). click ();якщо (driver.getTitle (). дорівнює (underConsTitle)) {System.out.println ("\" "+ t +" \ ""+ "будується.");} ще {System.out.println ("\" "+ t +" \ ""+ "працює.");}driver.navigate (). back ();}driver.quit ();}}
Вихід повинен бути подібним до вказаного нижче.
Вирішення проблем
У поодинокому випадку першим посиланням, яке отримує доступ до коду, може бути посилання "Домашня сторінка". У такому випадку дія driver.navigate.back () покаже порожню сторінку, оскільки перша дія відкриває браузер. Драйвер не зможе знайти всі інші посилання в порожньому браузері. Тому IDE видасть виняток, а решта коду не буде виконана. З цим легко впоратися, використовуючи цикл If.