jak znaleźć uszkodzone linki w Selenium
zanim omówimy, jak znaleźć uszkodzone linki za pomocą Selenium WebDriver, zajmijmy się bardziej fundamentalnym pytaniem.
co to są Niedziałające linki?
na początek link to obiekt HTML, który umożliwia użytkownikom migrację z jednej strony internetowej do drugiej po kliknięciu na nią. Jest to środek do poruszania się między różnymi stronami internetowymi.
zepsuty link, nazywany też często martwym linkiem, to taki, który nie działa tzn. nie przekierowuje na stronę, do której ma być przeznaczona. Zwykle dzieje się tak, ponieważ strona internetowa lub konkretna strona internetowa jest wyłączona lub nie istnieje. Gdy ktoś kliknie uszkodzony link, wyświetlany jest komunikat o błędzie.
uszkodzone linki mogą istnieć z powodu jakiegoś błędu serwera, który z kolei powoduje awarię odpowiedniej strony i nie jest wyświetlany. Prawidłowy adres URL będzie miał kod statusu HTTP 2XX. Uszkodzone łącza, które są zasadniczo nieprawidłowymi żądaniami HTTP, mają kody statusu 4xx i 5xx.
kod statusu 4xx odnosi się do błędu po stronie klienta, podczas gdy kod statusu 5xx zwykle wskazuje na błąd odpowiedzi serwera.
kody statusu HTTP dla uszkodzonych linków
kod statusu HTTP | definicja |
---|---|
400 (Bad Request) | serwer nie może przetworzyć żądania, ponieważ adres URL jest nieprawidłowy |
400 (Bad Request-zły Host) | serwer nie może przetworzyć żądania, ponieważ nazwa hosta jest nieprawidłowa |
400 (Bad Request-zły URL): | serwer nie może przetworzyć żądania, ponieważ adres URL ma nieprawidłowy format; brakujące znaki, takie jak nawiasy, ukośniki itp. |
400 (Bad Request – Empty) | odpowiedź zwrócona przez serwer jest pusta bez zawartości & brak kodu odpowiedzi |
400 (Bad Request-Timeout) | żądania HTTP zostały przekroczone |
400 (Bad Request-Reset) | serwer nie jest w stanie przetworzyć żądania, ponieważ jest zajęty przetwarzaniem innych żądań lub został źle skonfigurowany przez właściciela witryny |
404 (Nie znaleziono strony) | strona nie jest dostępna na serwerze |
403 (zabronione) | Serwer odmawia spełnienia żądanie autoryzacji jest wymagane |
410 (Gone) | strona zniknęła. Kod ten jest trwalszy niż 404 |
408 (Request Time Out) | serwer ma czas oczekiwania na żądanie. |
503 (Usługa niedostępna) | serwer jest tymczasowo przeciążony i nie może przetworzyć żądania |
po co sprawdzać Niedziałające linki w Selenium?
jeśli użytkownik kliknie uszkodzony link, zostanie przekierowany na stronę błędu. To oczywiście przyczynia się do sub-par doświadczenia użytkownika. Niedziałające linki nie mają na celu posiadania strony w pierwszej kolejności, ponieważ użytkownicy nie mogą znaleźć informacji lub usługi, której szukają.
każdy link na stronie musi być przetestowany, aby upewnić się, że działa zgodnie z oczekiwaniami. Jednak biorąc pod uwagę, że większość stron internetowych ma setki (czasami tysiące) linków wymaganych do ich działania, ręczne testowanie każdego linku wymagałoby nadmiernej ilości czasu, wysiłku i zasobów. Co więcej, z automatycznym testowaniem selenu jako opcja, byłoby to całkowicie niepotrzebne.
Czytaj Więcej: Jak robić zrzuty ekranu w Selenium
typowe przyczyny przerwanych linków
- 404 Nie znaleziono strony – docelowa strona internetowa została usunięta przez właściciela
- 400 złe żądanie – serwer nie może przetworzyć żądania HTTP wywołanego przez łącze, ponieważ żądany adres URL jest nieprawidłowy
- ze względu na ustawienia zapory użytkownika, przeglądarka nie może uzyskać dostępu do docelowej strony internetowej
- link jest błędnie napisany
jak zidentyfikować niedziałające linki w Selenium WebDriver
aby sprawdzić niedziałające linki w selenium, Proces jest prosty. Na stronie internetowej hiperłącza są implementowane za pomocą znacznika HTML Anchor (<a>). Wszystko, co skrypt musi zrobić, to zlokalizować każdy znacznik zakotwiczenia na stronie internetowej, uzyskać odpowiednie adresy URL i uruchomić łącza, aby sprawdzić, czy któryś z nich nie jest uszkodzony.
wykonaj następujące kroki, aby zidentyfikować uszkodzone linki w Selenium
- Zbierz wszystkie linki obecne na stronie internetowej na podstawie <a> tagu
- Wyślij żądanie HTTP dla każdego linku
- Sprawdź kod odpowiedzi HTTP
- Określ, czy link jest poprawny, czy uszkodzony na podstawie HTTP kod odpowiedzi
- powtórz proces dla wszystkich przechwyconych linków w pierwszym kroku
jeśli zastanawiasz się, jak znaleźć uszkodzone obrazy za pomocą Selenium WebDriver, użyj tego samego procesu.
Czytaj Więcej: Jak wykonać podwójne kliknięcie w Selenium
znalezienie uszkodzonych linków w Selenium: przykład
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 stubString 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 blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}driver.quit();}}
Uruchom testy Selenium na prawdziwych urządzeniach za darmo
przejdźmy przez kod, aby lepiej zrozumieć jego funkcjonalność.
1. Importuj Pakiety
Importuj poniższy pakiet wraz z pakietami domyślnymi:
import java.net.HttpURLConnection;
metody zawarte w tym pakiecie umożliwiają testerowi wysyłanie żądań HTTP i przechwytywanie kodów odpowiedzi HTTP, gdy są one zwracane przez kod.
2. Zbierz wszystkie linki na stronie
Znajdź wszystkie linki na stronie i umieść je na liście:
List<WebElement> links = driver.findElements(By.tagName("a"));
uzyskaj Iterator, aby poruszać się po liście linków:
Iterator<WebElement> it = links.iterator();
3: identyfikacja i Walidacja adresów URL
ten krok polega na sprawdzeniu, czy określony adres URL należy do domeny innej firmy lub czy jest pusty/null.
poniższy kod pobierze href znacznika kotwicy i zapisze go w zmiennej URL.
url = it.next().getAttribute("href");
jeśli adres URL jest równy null lub pusty, pomiń kolejne kroki.
if(url == null || url.isEmpty()){System.out.println("URL is either not configured for anchor tag or it is empty");continue;}
jeśli adres URL należy do domeny głównej, Kontynuuj. Jeśli należy do domeny innej firmy, pomiń kolejne kroki.
if(!url.startsWith(homePage)){System.out.println("URL belongs to another domain, skipping it.");continue;}
4. Metody Send HTTP request
w klasie HttpURLConnection będą wysyłać żądania HTTP i przechwytywać kod odpowiedzi HTTP. Dlatego wyjście metody openConnection () (URLConnection) jest typu rzucanego na HttpURLConnection.
huc = (HttpURLConnection)(new URL(url).openConnection());
jeśli testerzy ustawią typ żądania jako „HEAD” zamiast „GET”, zwracane będą tylko nagłówki, a nie treść dokumentu.
huc.setRequestMethod("HEAD");
gdy tester wywołuje metodę connect (), nawiązywane jest rzeczywiste połączenie z adresem URL i wysyłane jest żądanie HTTP.
huc.connect();
5. Sprawdź poprawność linków
użyj metody getResponseCode (), aby uzyskać kod odpowiedzi HTTP dla wcześniej wysłanego żądania HTTP.
respCode = huc.getResponseCode();
Sprawdź status linku (zepsuty lub nie) na podstawie kodu odpowiedzi
if(respCode >= 400){System.out.println(url+" is a broken link");}else{System.out.println(url+" is a valid link");}
znalezienie niedziałających linków w Selenium jest integralną częścią tworzenia i testowania strony internetowej. Korzystając z metody opisanej w tym artykule, testerzy mogą szybko i poprawnie zidentyfikować nieprawidłowe linki. Umożliwienie przejścia uszkodzonych łączy na etap produkcji poważnie zaszkodziłoby użytkownikowi i należy temu zapobiegać z najwyższą dokładnością. Dlatego wiedza o tym, jak testować uszkodzone linki w Selenium, jest ważną częścią zestawu narzędzi testera.