Как да намерите повредени връзки в Selenium
Какво представляват повредените връзки?
Неработещите връзки са връзки или URL адреси, които не са достъпни. Те може да не работят или да не функционират поради грешка в сървъра
Един URL винаги ще има статус с 2xx, който е валиден. Има различни HTTP кодове за състояние, които имат различни цели. За невалидна заявка HTTP статусът е 4xx и 5xx.
4xx клас код за състояние е главно за грешка от страна на клиента, а 5xx клас кодове за състояние е главно за грешка в отговор на сървъра.
Най-вероятно няма да можем да потвърдим дали тази връзка работи или не, докато не щракнем и не я потвърдим.
Защо трябва да проверявате Невалидни връзки?
Винаги трябва да се уверявате, че няма повредени връзки на сайта, защото потребителят не трябва да попада на страница с грешка.
Грешката възниква, ако правилата не се актуализират правилно или заявените ресурси не съществуват на сървъра.
Ръчната проверка на връзките е досадна задача, тъй като всяка уеб страница може да има голям брой връзки и ръчният процес трябва да се повтори за всички страници.
Използване на скрипт за автоматизация Selenium което ще автоматизира процеса е по-подходящо решение.
Как да проверите повредените връзки и изображения в Selenium
За да проверите повредените връзки, ще трябва да направите следните стъпки.
- Съберете всички връзки в уеб страницата въз основа на етикет.
- Изпратете HTTP заявка за връзката и прочетете HTTP кода за отговор.
- Разберете дали връзката е валидна или повредена въз основа на HTTP кода за отговор.
- Повторете това за всички заснети връзки.
Код за намиране на повредени връзки на уеб страница
По-долу е кодът на уеб драйвера, който тества нашия случай на използване:
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<WebElement> it = links.iterator();
Стъпка 3: Идентифициране и валидиране на URL
В тази част ще проверим дали URL адресът принадлежи към домейн на трета страна или дали URL адресът е празен/нулев.
Вземете href на anchor таг и го съхранете в url променлива.
url = it.next().getAttribute("href");
Проверете дали URL адресът е празен или празен и пропуснете останалите стъпки, ако условието е изпълнено.
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 заявка
Класът HttpURLConnection има методи за изпращане на HTTP заявка и улавяне на код на HTTP отговор. И така, изходът на метода openConnection() (URLConnection) е преобразуван от типа към HttpURLConnection.
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 за всеки цикъл, findElements() & By.tagName("a") метод.
Методът findElements() връща списък с уеб елементи с етикет a. С помощта на цикъл for-each се осъществява достъп до всеки елемент.
Кодът на WebDriver по-долу проверява всяка връзка от Mercury Обиколки на началната страница, за да определите тези, които работят и тези, които все още са в процес на изграждане.
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 цикъл.