Comment trouver des liens brisés dans Selenium

⚡ Résumé intelligent

Trouver des liens brisés dans Selenium WebDriver implique la collecte de chaque balise d'ancrage, l'envoi d'une requête HTTP HEAD à chaque URLet en lisant le code de réponse. Les liens renvoyant un code 400 ou supérieur sont signalés comme rompus, tandis que les liens valides renvoient des codes 2xx.

  • 🔗 Définition: Un lien brisé est un URL qui ne peut être atteinte, renvoyant généralement une erreur 4xx ou 5xx.
  • 🧭 Pourquoi c'est important: Les liens brisés nuisent à l'expérience utilisateur et au référencement naturel, c'est pourquoi les contrôles automatisés remplacent la vérification manuelle, lente et fastidieuse.
  • (I.e. Collecter les liens : Utilisez findElements avec By.tagName(“a”) pour rassembler tous les éléments d'ancrage de la page dans une liste.
  • 📡 Envoyer une requête HEAD : Ouvrir un HttpURLConnexion, définir la méthode sur HEAD et lire le code de réponse par URL.
  • Statut de validation : Considérez un code de réponse 400 ou supérieur comme un lien brisé et tout code 2xx comme un lien fonctionnel.

Comment trouver des liens brisés dans Selenium

Que sont les liens brisés ?

Les liens brisés sont des liens ou URLCes services sont inaccessibles. Ils peuvent être hors service ou ne pas fonctionner en raison d'une erreur de serveur.

A URL Le statut HTTP sera toujours 2xx, ce qui indique une requête valide. Il existe différents codes de statut HTTP, chacun ayant sa propre fonction. Pour une requête invalide, le statut HTTP est 4xx ou 5xx.

Les codes d'état de la classe 4xx concernent principalement les erreurs côté client, tandis que ceux de la classe 5xx concernent principalement les erreurs de réponse du serveur.

Nous ne serons probablement pas en mesure de confirmer si ce lien fonctionne ou non tant que nous n'aurons pas cliqué dessus et confirmé.

Pourquoi devriez-vous vérifier les liens brisés ?

Vous devez toujours vous assurer qu'il n'y a pas de liens brisés sur le site, car l'utilisateur ne doit pas atterrir sur une page d'erreur.

L'erreur se produit si les règles ne sont pas mises à jour correctement ou si les ressources demandées n'existent pas sur le serveur.

La vérification manuelle des liens est une tâche fastidieuse, car chaque page Web peut contenir un grand nombre de liens et le processus manuel doit être répété pour toutes les pages.

Un script d'automatisation utilisant Selenium qui automatisera le processus est une solution plus appropriée.

Comment vérifier les liens brisés et les images dans Selenium

Pour vérifier les liens rompus, vous devrez suivre les étapes suivantes.

  1. Récupérez tous les liens de la page web en fonction de l' étiquette.
  2. Envoyez une requête HTTP pour le lien et lisez le code de réponse HTTP.
  3. Déterminez si le lien est valide ou non en fonction du code de réponse HTTP.
  4. Répétez cette opération pour tous les liens capturés.

Code Trouver les liens brisés sur une page web

Vous trouverez ci-dessous le code du pilote Web qui teste notre cas d'utilisation :

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 stub

        String 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 block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        driver.quit();

    }
}

Expliquer le code des liens brisés

Étape 1 : Importer des packages

Importez le package ci-dessous en plus des packages par défaut :

import java.net.HttpURLConnection;

En utilisant les méthodes de ce package, nous pouvons envoyer des requêtes HTTP et capturer les codes de réponse HTTP à partir de la réponse.

Étape 2 : Collectez tous les liens de la page Web

Identifiez tous les liens d'une page web et stockez-les dans une liste.

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

Obtenez un itérateur pour parcourir la liste.

Iterator<WebElement> it = links.iterator();

Étape 3 : Identification et validation URL

Dans cette partie, nous vérifierons si un URL appartient à un domaine tiers ou si le URL est vide/nul.

Récupérez l'attribut href de la balise d'ancrage et stockez-le dans la variable url.

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

Vérifiez si le URL si la valeur est nulle ou vide, passez aux étapes suivantes si la condition est satisfaite.

if(url == null || url.isEmpty()){
              System.out.println("URL is either not configured for anchor tag or it is empty");
              continue;
     }

Vérifiez si le URL appartient à un domaine principal ou à un domaine tiers. Ignorez les étapes suivantes s'il appartient à un domaine tiers.

 if(!url.startsWith(homePage)){
           System.out.println("URL belongs to another domain, skipping it.");
           continue;
   }

Étape 4 : Envoyer une requête HTTP

Le HttpURLLa classe Connection possède des méthodes pour envoyer une requête HTTP et capturer le code de réponse HTTP. Ainsi, la sortie de la méthode openConnection() (URLConnection) est converti en HttpURLLien.

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

Nous pouvons définir le type de requête sur « HEAD » au lieu de « GET », afin que seuls les en-têtes soient renvoyés et non le corps du document.

huc.setRequestMethod("HEAD");

Lors de l'appel de la méthode connect(), la connexion réelle à l'URL est établie et la requête est envoyée.

huc.connect();

Étape 5 : validation des liens

Utilisation de getResponseCodeLa méthode () nous permet d'obtenir le code de réponse à la requête.

respCode = huc.getResponseCode();

En fonction du code de réponse, nous tenterons de vérifier l'état du lien.

if(respCode >= 400){
        System.out.println(url+" is a broken link");
}
else{
        System.out.println(url+" is a valid link");
}

Ainsi, nous pouvons obtenir tous les liens d'une page web et indiquer si ces liens sont valides ou non.

Comment obtenir TOUS les liens d'une page Web

L'une des procédures courantes sur le Web Tests est de tester si tous les liens présents dans la page fonctionnent. Cela peut être facilement réalisé en utilisant une combinaison des Java pour chaque boucle, findElements() & Par.tagName("a") méthode.

La méthode findElements() renvoie une liste d'éléments Web ayant la balise a. Chaque élément est ensuite parcouru à l'aide d'une boucle for-each.

Obtenez TOUS les liens d'une page Web

Le code WebDriver ci-dessous vérifie chaque lien du Mercury Page d'accueil des visites pour déterminer celles qui fonctionnent et celles qui sont encore en construction.

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 = "https://demo.guru99.com/test/newtours/";
        System.setProperty("webdriver.chrome.driver", "G:\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();

        String underConsTitle = "Under Construction: Mercury Tours";
        driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);

        driver.get(baseUrl);
        List<WebElement> linkElements = driver.findElements(By.tagName("a"));
        String[] linkTexts = new String[linkElements.size()];
        int i = 0;

        //extract the link texts of each link element
        for (WebElement e : linkElements) {
            linkTexts[i] = e.getText();
            i++;
        }

        //test each link
        for (String t : linkTexts) {
            driver.findElement(By.linkText(t)).click();
            if (driver.getTitle().equals(underConsTitle)) {
                System.out.println("\"" + t + "\""
                        + " is under construction.");
            } else {
                System.out.println("\"" + t + "\""
                        + " is working.");
            }
            driver.navigate().back();
        }
        driver.quit();
    }
}

Le résultat doit être similaire à celui indiqué ci-dessous.

  • L'accès aux liens d'images se fait à l'aide des méthodes By.cssSelector() et By.xpath().

Obtenez TOUS les liens d'une page Web

Dépannage

Dans un cas isolé, le premier lien accédé par le code pourrait être le lien « Accueil ». Dans ce cas, l'action `driver.navigate.back()` affichera une page blanche, car la première action consiste à ouvrir un navigateur. Le pilote ne pourra pas trouver les autres liens dans un navigateur vide. Par conséquent, l'IDE générera une exception et le reste du code ne s'exécutera pas. Ce problème peut être facilement résolu à l'aide d'une boucle `if`.

FAQ

Selenium collecte toutes les balises d'ancrage, envoie une requête HTTP HEAD à chaque URLet signale comme rompu tout lien renvoyant un code 400 ou supérieur.

Un code 4xx indique un problème côté client, comme une page manquante, tandis qu'un code 5xx indique une défaillance côté serveur lors du traitement de la requête.

Oui. Les sources des images sont collectées avec By.cssSelector() ou By.xpath(), puis chaque src URL est validé par son code de réponse HTTP.

Oui. Les robots d'exploration basés sur l'IA analysent les pages, suivent les liens et signalent les liens brisés ou les redirections. URLsans programmation manuelle.

L'IA surveille l'état des liens au fil du temps, prédit les pannes et suggère des remplacements, réduisant ainsi les audits manuels répétés des liens.

Résumez cet article avec :