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.
- Raccogli tutti i collegamenti nella pagina web in base al tag .
- Invia la richiesta HTTP per il collegamento e leggi il codice di risposta HTTP.
- Scopri se il collegamento è valido o interrotto in base al codice di risposta HTTP.
- 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);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 ("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.
Listlinks = driver.findElements (By.tagName ("a"));
Ottieni Iterator per attraversare l'elenco.
Iteratorit = 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);ListlinkElements = 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.
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.