Come trovare tutti i collegamenti interrotti utilizzando Selenium Webdriver

Sommario:

Anonim

Cosa sono i collegamenti interrotti?

I collegamenti interrotti sono collegamenti o URL che non sono raggiungibili. Potrebbero essere inattivi o non funzionanti a causa di un errore del server

Un URL avrà sempre uno stato con 2xx che è valido. Esistono diversi codici di stato HTTP che hanno scopi diversi. Per una richiesta non valida, lo stato HTTP è 4xx e 5xx.

La classe 4xx del codice di stato è principalmente per l'errore lato client e la classe 5xx dei codici di stato è principalmente per l'errore di risposta del server.

Molto probabilmente non saremo in grado di confermare se il collegamento funziona o meno finché non lo faremo clic e lo confermeremo.

Perché dovresti controllare i collegamenti interrotti?

Dovresti sempre assicurarti che non ci siano collegamenti interrotti sul sito perché l'utente non deve accedere a una pagina di errore.

L'errore si verifica se le regole non vengono aggiornate correttamente o le risorse richieste non esistono sul server.

Il controllo manuale dei collegamenti è un compito noioso, perché ogni pagina web può avere un gran numero di collegamenti e il processo manuale deve essere ripetuto per tutte le pagine.

Uno script di automazione che utilizza Selenium che automatizzerà il processo è una soluzione più adatta.

Come controllare i collegamenti e le immagini interrotti

Per controllare i collegamenti interrotti, sarà necessario eseguire i seguenti passaggi.

  1. Raccogli tutti i collegamenti nella pagina web in base al tag .
  2. Invia la richiesta HTTP per il collegamento e leggi il codice di risposta HTTP.
  3. Scopri se il collegamento è valido o interrotto in base al codice di risposta HTTP.
  4. Ripeti l'operazione per tutti i collegamenti acquisiti.

Codice per trovare i collegamenti interrotti su una pagina web

Di seguito è riportato il codice del driver Web che verifica il nostro caso d'uso:

pacchetto 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 {driver WebDriver statico privato = null;public static void main (String [] args) {// TODO Stub del metodo generato automaticamenteString homePage = "http://www.zlti.com";Stringa url = "";HttpURLConnection huc = null;int respCode = 200;driver = nuovo ChromeDriver ();driver.manage (). window (). maxim ();driver.get (homePage);List  links = 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 ("L'URL non è configurato per il tag di ancoraggio o è vuoto");Continua;}if (! url.startsWith (homePage)) {System.out.println ("L'URL appartiene a un altro dominio, saltandolo.");Continua;}provare {huc = (HttpURLConnection) (nuovo URL (url) .openConnection ());huc.setRequestMethod ("HEAD");huc.connect ();respCode = huc.getResponseCode ();if (respCode> = 400) {System.out.println (url + "è un collegamento interrotto");}altro{System.out.println (url + "è un collegamento valido");}} catch (MalformedURLException e) {// TODO Blocco catch generato automaticamentee.printStackTrace ();} catch (IOException e) {// TODO Blocco catch generato automaticamentee.printStackTrace ();}}driver.quit ();}}

Spiegazione del codice Esempio

Passaggio 1: importare i pacchetti

Importa il pacchetto seguente oltre ai pacchetti predefiniti:

import java.net.HttpURLConnection;

Utilizzando i metodi in questo pacchetto, possiamo inviare richieste HTTP e acquisire codici di risposta HTTP dalla risposta.

Passaggio 2: raccogliere tutti i collegamenti nella pagina Web

Identifica tutti i link in una pagina web e memorizzali in List.

List  links = driver.findElements (By.tagName ("a"));

Ottieni Iterator per attraversare l'elenco.

Iterator  it = links.iterator ();

Passaggio 3: identificazione e convalida dell'URL

In questa parte, controlleremo se l'URL appartiene a un dominio di terze parti o se l'URL è vuoto / nullo.

Ottieni href del tag di ancoraggio e memorizzalo nella variabile url.

url = it.next (). getAttribute ("href");

Controlla se l'URL è nullo o vuoto e salta i passaggi rimanenti se la condizione è soddisfatta.

if (url == null || url.isEmpty ()) {System.out.println ("L'URL non è configurato per il tag di ancoraggio o è vuoto");Continua;}

Verifica se l'URL appartiene a un dominio principale o a una terza parte. Salta i passaggi rimanenti se appartiene a un dominio di terze parti.

 if (! url.startsWith (homePage)) {System.out.println ("L'URL appartiene a un altro dominio, saltandolo.");Continua;}

Passaggio 4: invia la richiesta http

La classe HttpURLConnection dispone di metodi per inviare richieste HTTP e acquisire il codice di risposta HTTP. Quindi, l'output del metodo openConnection () (URLConnection) è di tipo cast a HttpURLConnection.

huc = (HttpURLConnection) (nuovo URL (url) .openConnection ());

Possiamo impostare il tipo di richiesta come "HEAD" invece di "GET". In modo che vengano restituite solo le intestazioni e non il corpo del documento.

huc.setRequestMethod ("HEAD");

Quando si richiama il metodo connect (), viene stabilita la connessione effettiva all'URL e la richiesta viene inviata.

huc.connect ();

Passaggio 5: convalida dei collegamenti

Utilizzando il metodo getResponseCode () possiamo ottenere il codice di risposta per la richiesta

respCode = huc.getResponseCode ();

In base al codice di risposta, proveremo a controllare lo stato del collegamento.

if (respCode> = 400) {System.out.println (url + "è un collegamento interrotto");}altro{System.out.println (url + "è un collegamento valido");}

Pertanto, possiamo ottenere tutti i collegamenti dalla pagina web e stampare se i collegamenti sono validi o interrotti.

Spero che questo tutorial ti aiuti a controllare i collegamenti interrotti usando il selenio.

Come ottenere TUTTI i collegamenti di una pagina Web

Una delle procedure comuni nel Web Testing è verificare se tutti i collegamenti presenti all'interno della pagina funzionano. Ciò può essere fatto comodamente utilizzando una combinazione del metodo Java for-each loop , findElements () e By.tagName ("a") .

Il metodo findElements (), restituisce un elenco di elementi Web con tag a. Utilizzando un ciclo for-each, si accede a ogni elemento.

Il codice WebDriver riportato di seguito controlla ogni collegamento dalla home page di Mercury Tours per determinare quelli che funzionano e quelli che sono ancora in costruzione.

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 = "http://demo.guru99.com/test/newtours/";System.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");Driver WebDriver = nuovo ChromeDriver ();String underConsTitle = "Under Construction: Mercury Tours";driver.manage (). timeouts (). implicitlyWait (5, TimeUnit.SECONDS);driver.get (baseUrl);List  linkElements = driver.findElements (By.tagName ("a"));String [] linkTexts = new String [linkElements.size ()];int i = 0;// estrae i testi del collegamento di ogni elemento del collegamentoper (WebElement e: linkElements) {linkTexts [i] = e.getText ();i ++;}// verifica ogni collegamentofor (String t: linkTexts) {driver.findElement (By.linkText (t)). clic ();if (driver.getTitle (). equals (underConsTitle)) {System.out.println ("\" "+ t +" \ ""+ "è in costruzione.");} altro {System.out.println ("\" "+ t +" \ ""+ "funziona.");}driver.navigate (). back ();}driver.quit ();}}

L'output dovrebbe essere simile a quello indicato di seguito.

  • L'accesso ai collegamenti alle immagini viene effettuato utilizzando i metodi By.cssSelector () e By.xpath ().
  • Risoluzione dei problemi

    In un caso isolato, il primo collegamento a cui si accede dal codice potrebbe essere il collegamento "Home". In tal caso, l'azione driver.navigate.back () mostrerà una pagina vuota mentre la prima azione è l'apertura di un browser. Il driver non sarà in grado di trovare tutti gli altri collegamenti in un browser vuoto. Quindi IDE genererà un'eccezione e il resto del codice non verrà eseguito. Questo può essere facilmente gestito utilizzando un ciclo If.