Co to są uszkodzone linki?
Uszkodzone linki to linki lub adresy URL, do których nie można dotrzeć. Mogą być wyłączone lub nie działać z powodu błędu serwera
Adres URL zawsze będzie miał status 2xx, który jest prawidłowy. Istnieją różne kody stanu HTTP, które mają różne cele. W przypadku nieprawidłowego żądania stan HTTP to 4xx i 5xx.
Klasa 4xx kodu statusu jest przeznaczona głównie dla błędów po stronie klienta, a klasa 5xx kodów statusu jest przeznaczona głównie dla błędu odpowiedzi serwera.
Najprawdopodobniej nie będziemy w stanie potwierdzić, czy ten link działa, czy nie, dopóki go nie klikniemy i nie potwierdzimy.
Dlaczego powinieneś sprawdzić uszkodzone linki?
Należy zawsze upewnić się, że w witrynie nie ma uszkodzonych linków, ponieważ użytkownik nie powinien trafiać na stronę błędu.
Błąd występuje, jeśli reguły nie zostały poprawnie zaktualizowane lub żądane zasoby nie istnieją na serwerze.
Ręczne sprawdzanie linków jest żmudnym zadaniem, ponieważ każda strona internetowa może mieć dużą liczbę linków, a proces ręczny należy powtórzyć dla wszystkich stron.
Bardziej odpowiednim rozwiązaniem jest skrypt automatyzacji wykorzystujący Selenium, który zautomatyzuje proces.
Jak sprawdzić uszkodzone linki i obrazy
Aby sprawdzić uszkodzone łącza, musisz wykonać następujące czynności.
- Zbierz wszystkie linki na stronie internetowej na podstawie tagu .
- Wyślij żądanie HTTP dotyczące łącza i przeczytaj kod odpowiedzi HTTP.
- Dowiedz się, czy link jest prawidłowy, czy uszkodzony na podstawie kodu odpowiedzi HTTP.
- Powtórz to dla wszystkich przechwyconych linków.
Kod do znajdowania uszkodzonych łączy na stronie internetowej
Poniżej znajduje się kod sterownika sieciowego, który testuje nasz przypadek użycia:
pakiet 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;klasa publiczna BrokenLinks {prywatny statyczny sterownik WebDriver = null;public static void main (String [] args) {// TODO Automatycznie wygenerowany kod pośredniczący metodyString homePage = "http://www.zlti.com";String url = "";HttpURLConnection huc = null;int respCode = 200;sterownik = nowy ChromeDriver ();driver.manage (). window (). maximize ();driver.get (homePage);Listlinks = driver.findElements (By.tagName ("a"));Iterator it = links.iterator ();while (it.hasNext ()) {url = it.next (). getAttribute ("href");System.out.println (url);if (url == null || url.isEmpty ()) {System.out.println ("URL nie jest skonfigurowany dla tagu kotwicy lub jest pusty");kontyntynuj;}if (! url.startsWith (homePage)) {System.out.println ("URL należy do innej domeny, pomijam go.");kontyntynuj;}próbować {huc = (HttpURLConnection) (nowy adres URL (url) .openConnection ());huc.setRequestMethod ("HEAD");huc.connect ();respCode = huc.getResponseCode ();if (respCode> = 400) {System.out.println (url + "to uszkodzony link");}jeszcze{System.out.println (url + "to poprawny link");}} catch (MalformedURLException e) {// TODO Automatycznie wygenerowany blok catche.printStackTrace ();} catch (IOException e) {// TODO Automatycznie wygenerowany blok catche.printStackTrace ();}}driver.quit ();}}
Wyjaśnienie kodu Przykład
Krok 1: Importuj pakiety
Zaimportuj poniższy pakiet oprócz pakietów domyślnych:
import java.net.HttpURLConnection;
Korzystając z metod zawartych w tym pakiecie, możemy wysyłać żądania HTTP i przechwytywać kody odpowiedzi HTTP z odpowiedzi.
Krok 2: Zbierz wszystkie linki na stronie internetowej
Zidentyfikuj wszystkie linki na stronie internetowej i zapisz je na liście.
Listlinks = driver.findElements (By.tagName ("a"));
Zdobądź Iterator, aby przejść przez Listę.
Iteratorit = links.iterator ();
Krok 3: Identyfikacja i weryfikacja adresu URL
W tej części sprawdzimy, czy adres URL należy do domeny strony trzeciej, czy też jest pusty / pusty.
Pobierz href tagu kotwicy i zapisz go w zmiennej url.
url = it.next (). getAttribute ("href");
Sprawdź, czy adres URL ma wartość null lub Empty i pomiń pozostałe kroki, jeśli warunek jest spełniony.
if (url == null || url.isEmpty ()) {System.out.println ("URL nie jest skonfigurowany dla tagu kotwicy lub jest pusty");kontyntynuj;}
Sprawdź, czy adres URL należy do domeny głównej czy do firmy zewnętrznej. Pomiń pozostałe kroki, jeśli należy do domeny innej firmy.
if (! url.startsWith (homePage)) {System.out.println ("URL należy do innej domeny, pomijam go.");kontyntynuj;}
Krok 4: wyślij żądanie http
Klasa HttpURLConnection zawiera metody wysyłania żądań HTTP i przechwytywania kodu odpowiedzi HTTP. Tak więc wynik metody openConnection () (URLConnection) jest rzutowany na HttpURLConnection.
huc = (HttpURLConnection) (nowy adres URL (url) .openConnection ());
Możemy ustawić typ żądania na „HEAD” zamiast „GET”. Dzięki temu zwracane są tylko nagłówki, a nie treść dokumentu.
huc.setRequestMethod ("HEAD");
Przy wywołaniu metody connect () nawiązywane jest rzeczywiste połączenie z adresem URL i wysyłane jest żądanie.
huc.connect ();
Krok 5: Weryfikacja łączy
Za pomocą metody getResponseCode () możemy uzyskać kod odpowiedzi na żądanie
respCode = huc.getResponseCode ();
Na podstawie kodu odpowiedzi postaramy się sprawdzić status linku.
if (respCode> = 400) {System.out.println (url + "to uszkodzony link");}jeszcze{System.out.println (url + "to poprawny link");}
W ten sposób możemy uzyskać wszystkie linki ze strony internetowej i wydrukować, czy linki są prawidłowe, czy uszkodzone.
Mam nadzieję, że ten samouczek pomoże Ci sprawdzić uszkodzone linki za pomocą selenu.
Jak uzyskać WSZYSTKIE linki do strony internetowej
Jedną z typowych procedur testowania sieci jest sprawdzenie, czy wszystkie linki obecne na stronie działają. Można to wygodnie zrobić, używając kombinacji pętli for-each w języku Java , metody findElements () i By.tagName („a”) .
Metoda findElements () zwraca listę elementów sieci Web ze znacznikiem a. Za pomocą pętli for-each uzyskuje się dostęp do każdego elementu.
Poniższy kod WebDriver sprawdza każde łącze ze strony głównej Mercury Tours, aby określić, które działają, a które są nadal w budowie.
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. *;klasa publiczna P1 {public static void main (String [] args) {String baseUrl = "http://demo.guru99.com/test/newtours/";System.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");Sterownik WebDriver = nowy ChromeDriver ();String underConsTitle = "W budowie: wycieczki Mercury";driver.manage (). timeouts (). implicitlyWait (5, TimeUnit.SECONDS);driver.get (baseUrl);ListlinkElements = driver.findElements (By.tagName ("a"));String [] linkTexts = new String [linkElements.size ()];int i = 0;// wyodrębnij teksty linków z każdego elementu linkufor (WebElement e: linkElements) {linkTexts [i] = e.getText ();i ++;}// przetestuj każdy linkfor (String t: linkTexts) {driver.findElement (By.linkText (t)). click ();if (driver.getTitle (). equals (underConsTitle)) {System.out.println ("\" "+ t +" \ ""+ „w budowie”);} else {System.out.println ("\" "+ t +" \ ""+ „działa”);}driver.navigate (). back ();}driver.quit ();}}
Wynik powinien być podobny do pokazanego poniżej.
Rozwiązywanie problemów
W odosobnionym przypadku pierwszym łączem, do którego dostęp uzyskał kod, może być łącze „Strona główna”. W takim przypadku akcja driver.navigate.back () wyświetli pustą stronę, ponieważ pierwszą czynnością jest otwarcie przeglądarki. Sterownik nie będzie mógł znaleźć wszystkich innych łączy w pustej przeglądarce. Więc IDE zgłosi wyjątek, a reszta kodu nie zostanie wykonana. Można to łatwo obsłużyć za pomocą pętli If.