Comment trouver des liens brisés dans Selenium
Avant de discuter de la recherche de liens brisés à l’aide de Selenium WebDriver, abordons une question plus fondamentale.
Que sont les liens brisés ?
Pour commencer, un lien est un objet HTML qui permet aux utilisateurs de migrer d’une page Web à une autre lorsqu’ils cliquent dessus. C’est un moyen de naviguer entre différentes pages Web sur Internet.
Un lien brisé, aussi souvent appelé lien mort, est un lien qui ne fonctionne pas, c’est-à-dire ne redirige pas vers la page Web à laquelle il est destiné. Cela se produit généralement parce que le site Web ou une page Web particulière est en panne ou n’existe pas. Lorsque quelqu’un clique sur un lien rompu, un message d’erreur s’affiche.
Des liens brisés peuvent exister en raison d’une sorte d’erreur de serveur, qui, à son tour, provoque un dysfonctionnement de la page correspondante et ne s’affiche pas. Une URL valide aura un code d’état HTTP 2xx. Les liens rompus, qui sont essentiellement des requêtes HTTP invalides, ont des codes d’état 4xx et 5xx.
Le code d’état 4xx fait référence à une erreur côté client, tandis que le code d’état 5xx pointe généralement vers une erreur de réponse du serveur.
Codes d’état HTTP pour les liens rompus
Code d’état HTTP | Définition |
---|---|
400 ( Mauvaise demande) | Serveur incapable de traiter la demande car l’URL est incorrecte |
400 ( Mauvaise demande – Mauvais hôte) | Serveur incapable de traiter la demande car le nom d’hôte n’est pas valide |
400 ( Mauvaise demande – Mauvaise URL): | Le serveur ne peut pas traiter la demande car l’URL est de format incorrect ; des caractères manquants tels que des crochets, des barres obliques, etc. |
400 ( Bad Request – Empty) | La réponse renvoyée par le serveur est vide sans contenu & aucun code de réponse |
400 ( Délai d’attente de la requête incorrecte) | Les requêtes HTTP ont expiré |
400 ( Bad Request -Reset) | Le serveur ne peut pas traiter la demande, car il est occupé à traiter d’autres demandes ou a été mal configuré par le propriétaire du site |
404 ( Page non trouvée) | La page n’est pas disponible sur le serveur |
403 ( Interdit) | Le serveur refuse de remplir le demande d’autorisation requise |
410 ( Parti) | La page a disparu. Ce code est plus permanent que 404 |
408 ( Délai d’attente de la demande) | Le serveur a expiré en attendant la demande. |
503 ( Service indisponible) | Le serveur est temporairement surchargé et ne peut pas traiter la demande |
Pourquoi rechercher des liens brisés dans le sélénium?
Si un utilisateur clique sur un lien rompu, il sera dirigé vers une page d’erreur. Cela contribue évidemment à une expérience utilisateur inférieure à la normale. Les liens brisés vont à l’encontre de l’objectif d’avoir le site Web en premier lieu parce que les utilisateurs ne peuvent pas trouver l’information ou le service qu’ils recherchent.
Chaque lien sur un site Web doit être testé pour s’assurer qu’il fonctionne comme prévu. Cependant, étant donné que la plupart des sites Web ont des centaines (parfois, des milliers) de liens nécessaires pour les faire fonctionner, les tests manuels de chaque lien nécessiteraient des quantités excessives de temps, d’efforts et de ressources. De plus, le test automatisé du sélénium étant une option, il serait totalement inutile.
En savoir plus: Comment prendre des captures d’écran dans Selenium
Raisons courantes de Liens brisés
- 404 Page introuvable – La page web de destination a été supprimée par le propriétaire
- 400 Mauvaise demande – Le serveur ne peut pas traiter la requête HTTP déclenchée par le lien car l’adresse URL demandée est incorrecte
- En raison des paramètres de pare-feu de l’utilisateur, le navigateur ne peut pas accéder à la page Web de destination
- Le lien est mal orthographié
Comment identifier les liens brisés dans Selenium WebDriver
Pour vérifier les liens brisés dans le sélénium, le processus est simple. Sur une page Web, les hyperliens sont implémentés à l’aide de la balise HTML Anchor (< a >). Tout ce que le script doit faire est de localiser chaque balise d’ancrage sur une page Web, d’obtenir les URL correspondantes et de parcourir les liens pour vérifier si l’un d’eux est cassé.
Utilisez les étapes suivantes pour identifier les liens rompus dans Selenium
- Collectez tous les liens présents sur une page Web sur la base de la balise <a >
- Envoyer une requête HTTP pour chaque lien
- Vérifiez le code de réponse HTTP
- Déterminez si le lien est valide ou cassé sur la base de la requête HTTP code de réponse
- Répétez le processus pour tous les liens capturés lors de la première étape
Si vous vous demandez comment trouver des images brisées à l’aide de Selenium WebDriver, utilisez le même processus.
En savoir plus: Comment effectuer un double clic dans le Sélénium
Trouver des liens brisés dans le Sélénium: Exemple
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();}}
Exécutez des Tests de Sélénium sur de vrais appareils gratuitement
Passons en revue le code pour une meilleure compréhension de ses fonctionnalités.
1. Importer des paquets
Importer le paquet ci-dessous avec les paquets par défaut:
import java.net.HttpURLConnection;
Les méthodes de ce package permettent au testeur d’envoyer des requêtes HTTP et de capturer des codes de réponse HTTP lorsqu’ils sont renvoyés par le code.
2. Recueillir tous les liens sur la page web
Trouvez tous les liens sur la page Web et placez-les dans une liste:
List<WebElement> links = driver.findElements(By.tagName("a"));
Obtenir l’itérateur pour parcourir la liste des liens:
Iterator<WebElement> it = links.iterator();
3: Identifiez et validez les URL
Cette étape consiste à vérifier si une certaine URL appartient à un domaine tiers ou si elle est vide / nulle.
Le code ci-dessous va récupérer le href de la balise d’ancrage et le stocker dans la variable URL.
url = it.next().getAttribute("href");
Si l’URL est nulle ou vide, ignorez les étapes suivantes.
if(url == null || url.isEmpty()){System.out.println("URL is either not configured for anchor tag or it is empty");continue;}
Si l’URL appartient au domaine principal, continuez. S’il appartient à un domaine tiers, ignorez les étapes suivantes.
if(!url.startsWith(homePage)){System.out.println("URL belongs to another domain, skipping it.");continue;}
4. Les méthodes Send HTTP request
de la classe HttpURLConnection enverront des requêtes HTTP et captureront le code de réponse HTTP. Par conséquent, la sortie de la méthode openConnection() (URLConnection) est de type castée en HttpURLConnection.
huc = (HttpURLConnection)(new URL(url).openConnection());
Si les testeurs définissent le type de requête comme « HEAD » au lieu de « GET », seuls les en-têtes seront renvoyés, pas le corps du document.
huc.setRequestMethod("HEAD");
Lorsque le testeur appelle la méthode connect(), la connexion réelle à l’URL est établie et la requête HTTP est envoyée.
huc.connect();
5. Validez les liens
Utilisez la méthode getResponseCode() pour obtenir le code de réponse HTTP de la requête HTTP précédemment envoyée.
respCode = huc.getResponseCode();
Vérifier l’état du lien (cassé ou non) en fonction du code de réponse
if(respCode >= 400){System.out.println(url+" is a broken link");}else{System.out.println(url+" is a valid link");}
Trouver des liens brisés dans Selenium fait partie intégrante du développement et des tests du site Web. En utilisant la méthode décrite dans cet article, les testeurs peuvent identifier rapidement et correctement les liens défectueux. Permettre aux liens brisés de passer à l’étape de la production endommagerait gravement l’expérience utilisateur et doit être évité avec une extrême minutie. C’est pourquoi savoir tester les liens brisés dans le sélénium est une partie importante de la boîte à outils d’un testeur.