Come trovare collegamenti interrotti in Selenium
Prima di discutere su come trovare collegamenti interrotti usando Selenium WebDriver, affrontiamo una domanda più fondamentale.
Cosa sono i collegamenti interrotti?
Per cominciare, un collegamento è un oggetto HTML che consente agli utenti di migrare da una pagina Web a un’altra quando fanno clic su di esso. Si tratta di un mezzo per navigare tra le diverse pagine web su Internet.
Un collegamento interrotto, spesso chiamato anche collegamento morto, è uno che non funziona, cioè non reindirizza alla pagina web a cui è destinato. Questo di solito si verifica perché il sito web o una particolare pagina web è inattivo o non esiste. Quando qualcuno fa clic su un collegamento interrotto, viene visualizzato un messaggio di errore.
Possono esistere collegamenti interrotti a causa di un qualche tipo di errore del server, che a sua volta causa il malfunzionamento della pagina corrispondente e non viene visualizzato. Un URL valido avrà un codice di stato HTTP 2xx. I collegamenti interrotti, che sono essenzialmente richieste HTTP non valide, hanno codici di stato 4xx e 5xx.
Il codice di stato 4xx si riferisce a un errore lato client, mentre il codice di stato 5xx di solito punta a un errore di risposta del server.
HTTP Codici di Stato per i Collegamenti Interrotti
HTTP Status Code | Definizione |
---|---|
400 (Bad Request) | Server in grado di elaborare la richiesta di URL non è corretto |
400 (Bad Request – Bad Host) | Server in grado di elaborare la richiesta come nome host non valido |
400 (Bad Request – Bad URL): | Il server non può elaborare la richiesta poiché l’URL è di formato errato; mancano caratteri come parentesi, barre, ecc. |
400 (Bad Request – Vuoto) | Risposta restituito dal server è vuota, senza contenuto & nessun codice di risposta |
400 (Bad Request Timeout) | HTTP richieste di timeout |
400 (Bad Request – Reset) | Server non è in grado di elaborare la richiesta, in quanto è in corso l’elaborazione di altre richieste o è stato configurato in modo errato dal proprietario del sito |
404 (Pagina Non Trovata) | Pagina non è disponibile sul server |
403 (Vietato) | Server si rifiuta di compiere il richiesta come autorizzazione è richiesta |
410 (Gone) | La pagina è andata. Questo codice è più permanente di 404 |
408 (Timeout della richiesta) | Il server ha timeout in attesa della richiesta. |
503 (Servizio non disponibile) | Il server è temporaneamente sovraccarico e non è in grado di elaborare la richiesta |
Perché controllare i collegamenti interrotti nel selenio?
Se un utente fa clic su un collegamento interrotto, verrà indirizzato a una pagina di errore. Questo ovviamente contribuisce alla sub-par esperienza utente. I collegamenti interrotti sconfiggono lo scopo di avere il sito Web in primo luogo perché gli utenti non riescono a trovare le informazioni o il servizio che stanno cercando.
Ogni link su un sito web deve essere testato per garantire che funzioni come previsto. Tuttavia, dato che la maggior parte dei siti web hanno centinaia (a volte, migliaia) di link necessari per farli funzionare, test manuale di ogni link richiederebbe una quantità eccessiva di tempo, sforzo e risorse. Inoltre, con il test automatico del selenio come opzione, sarebbe completamente inutile.
Per saperne di più: Come prendere Screenshot in Selenio
Motivi più Comuni per i Collegamenti Interrotti
- 404 Pagina Non Trovata La pagina web di destinazione è stato rimosso dal proprietario
- 400 Bad Request – Il server non è possibile elaborare la richiesta HTTP innescato da il link perché l’indirizzo URL richiesto è di sbagliato
- a Causa dell’utente, le impostazioni del firewall, il browser non è in grado di accedere la pagina web di destinazione
- Il link è errato
Come identificare i collegamenti interrotti in Selenio WebDriver
Per controllare i collegamenti interrotti in Selenio, il processo è semplice. In una pagina Web, i collegamenti ipertestuali vengono implementati utilizzando il tag HTML Anchor (< a >). Tutto lo script deve fare è individuare ogni tag di ancoraggio su una pagina Web, ottenere gli URL corrispondenti ed eseguire i collegamenti per verificare se qualcuno di essi è rotto.
Utilizzare la procedura seguente per identificare i collegamenti interrotti in Selenio
- Raccogliere tutti i link presenti in una pagina web basato su <un> tag
- Invia richiesta HTTP per ogni link
- Verificare il codice di risposta HTTP
- Determinare se il link è valido o è rotto basato sul codice di risposta HTTP
- Ripetere il processo per tutti i collegamenti catturato con il primo passo
Se ti stai chiedendo come trovare rotto le immagini utilizzando il Selenio WebDriver, utilizzare lo stesso processo.
Per saperne di più: Come eseguire il doppio clic in Selenio
Ricerca di collegamenti interrotti in Selenio: Esempio
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();}}
Esegui test Selenio su dispositivi reali gratuitamente
Passiamo attraverso il codice per una comprensione più approfondita della sua funzionalità.
1. Importa pacchetti
Importa il pacchetto sottostante insieme ai pacchetti predefiniti:
import java.net.HttpURLConnection;
I metodi in questo pacchetto consentono al tester di inviare richieste HTTP e acquisire i codici di risposta HTTP quando vengono restituiti dal codice.
2. Raccogliere tutti i link sulla pagina web
Trovare tutti i link sulla pagina web e inserirli in un elenco:
List<WebElement> links = driver.findElements(By.tagName("a"));
Ottenere un Iteratore per muoversi attraverso la lista di link:
Iterator<WebElement> it = links.iterator();
3: Identificare e Convalidare Url
Questo passo è per verificare se un determinato URL appartiene a un dominio di terze parti o se è vuota o null.
Il codice sottostante recupererà l’href del tag di ancoraggio e lo memorizzerà nella variabile URL.
url = it.next().getAttribute("href");
Se l’URL è nullo o Vuoto, saltare i passaggi successivi.
if(url == null || url.isEmpty()){System.out.println("URL is either not configured for anchor tag or it is empty");continue;}
Se l’URL appartiene al dominio principale, continuare. Se appartiene a un dominio di terze parti, salta i passaggi successivi.
if(!url.startsWith(homePage)){System.out.println("URL belongs to another domain, skipping it.");continue;}
4. Invia richiesta HTTP
I metodi della classe HttpURLConnection inviano richieste HTTP e acquisiscono il codice di risposta HTTP. Pertanto, l’output del metodo openConnection () (URLConnection) viene digitato su HttpURLConnection.
huc = (HttpURLConnection)(new URL(url).openConnection());
Se i tester impostano il tipo di richiesta come “HEAD” invece di “GET”, verranno restituite solo le intestazioni, non il corpo del documento.
huc.setRequestMethod("HEAD");
Quando il tester richiama il metodo connect (), viene stabilita la connessione effettiva all’URL e viene inviata la richiesta HTTP.
huc.connect();
5. Validate Links
Utilizzare il metodo getResponseCode() per ottenere il codice di risposta HTTP per la richiesta HTTP inviata in precedenza.
respCode = huc.getResponseCode();
Controlla lo stato del collegamento (rotto o meno) in base al codice di risposta
if(respCode >= 400){System.out.println(url+" is a broken link");}else{System.out.println(url+" is a valid link");}
Trovare collegamenti interrotti in Selenium è parte integrante dello sviluppo e dei test del sito web. Utilizzando il metodo descritto in questo articolo, i tester possono identificare i collegamenti malfunzionanti in modo rapido e corretto. Consentire il passaggio di collegamenti interrotti nella fase di produzione danneggerebbe gravemente l’esperienza dell’utente e deve essere prevenuta con estrema accuratezza. Questo è il motivo per cui sapere come testare i collegamenti interrotti nel Selenio è una parte importante del toolkit di un tester.