Que sont les liens brisés?
Les liens rompus sont des liens ou des URL qui ne sont pas accessibles. Ils peuvent être en panne ou ne pas fonctionner en raison d'une erreur du serveur
Une URL aura toujours un statut avec 2xx qui est valide. Il existe différents codes d'état HTTP qui ont des objectifs différents. Pour une demande non valide, l'état HTTP est 4xx et 5xx.
La classe 4xx de code d'état est principalement pour l'erreur côté client, et la classe 5xx de codes d'état est principalement pour l'erreur de réponse du serveur.
Nous ne serons probablement pas en mesure de confirmer si ce lien fonctionne ou non jusqu'à ce que nous cliquions et ne le confirmions pas.
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 avoir 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 et les images brisés
Pour vérifier les liens rompus, vous devrez suivre les étapes suivantes.
- Collectez tous les liens de la page Web en fonction de la balise .
- Envoyez une requête HTTP pour le lien et lisez le code de réponse HTTP.
- Découvrez si le lien est valide ou rompu en fonction du code de réponse HTTP.
- Répétez cette opération pour tous les liens capturés.
Code pour trouver les liens brisés sur une page Web
Vous trouverez ci-dessous le code du pilote Web qui teste notre cas d'utilisation:
automatisation des paquetsimport 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 {pilote WebDriver statique privé = null;public static void main (String [] args) {// TODO Stub de méthode généré automatiquementString homePage = "http://www.zlti.com";String url = "";HttpURLConnection huc = null;int respCode = 200;pilote = nouveau ChromeDriver ();driver.manage (). window (). maximiser ();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 n'est pas configurée pour la balise d'ancrage ou elle est vide");Continuez;}if (! url.startsWith (homePage)) {System.out.println ("L'URL appartient à un autre domaine, l'ignore.");Continuez;}essayer {huc = (HttpURLConnection) (nouvelle URL (url) .openConnection ());huc.setRequestMethod ("HEAD");huc.connect ();respCode = huc.getResponseCode ();if (respCode> = 400) {System.out.println (url + "est un lien rompu");}autre{System.out.println (url + "est un lien valide");}} catch (MalformedURLException e) {// TODO Bloc catch généré automatiquemente.printStackTrace ();} catch (IOException e) {// TODO Bloc catch généré automatiquemente.printStackTrace ();}}driver.quit ();}}
Expliquer l'exemple de code
É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 des codes de réponse HTTP à partir de la réponse.
Étape 2: Collectez tous les liens de la page Web
Identifiez tous les liens dans une page Web et stockez-les dans Liste.
Listlinks = driver.findElements (By.tagName ("a"));
Obtenez Iterator pour parcourir la liste.
Iteratorit = links.iterator ();
Étape 3: identification et validation de l'URL
Dans cette partie, nous vérifierons si l'URL appartient au domaine tiers ou si l'URL est vide / nulle.
Obtenez href de la balise d'ancrage et stockez-la dans la variable url.
url = it.next (). getAttribute ("href");
Vérifiez si l'URL est nulle ou vide et ignorez les étapes restantes si la condition est remplie.
if (url == null || url.isEmpty ()) {System.out.println ("L'URL n'est pas configurée pour la balise d'ancrage ou elle est vide");Continuez;}
Vérifiez si l'URL appartient à un domaine principal ou à un tiers. Ignorez les étapes restantes s'il appartient à un domaine tiers.
if (! url.startsWith (homePage)) {System.out.println ("L'URL appartient à un autre domaine, l'ignore.");Continuez;}
Étape 4: envoyer une requête http
La classe HttpURLConnection a 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 de type transtypée en HttpURLConnection.
huc = (HttpURLConnection) (nouvelle URL (url) .openConnection ());
Nous pouvons définir le type de requête sur "HEAD" au lieu de "GET". Pour 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 demande est envoyée.
huc.connect ();
Étape 5: Validation des liens
En utilisant la méthode getResponseCode (), nous pouvons obtenir le code de réponse pour la requête
respCode = huc.getResponseCode ();
Sur la base du code de réponse, nous essaierons de vérifier l'état du lien.
if (respCode> = 400) {System.out.println (url + "est un lien rompu");}autre{System.out.println (url + "est un lien valide");}
Ainsi, nous pouvons obtenir tous les liens de la page Web et imprimer si les liens sont valides ou cassés.
J'espère que ce tutoriel vous aidera à vérifier les liens brisés à l'aide de sélénium.
Comment obtenir TOUS les liens d'une page Web
L'une des procédures courantes dans les tests Web consiste à tester si tous les liens présents dans la page fonctionnent. Cela peut être fait en utilisant une combinaison de la méthode Java for-each loop , findElements () et By.tagName ("a") .
La méthode findElements () renvoie une liste d'éléments Web avec la balise a. En utilisant une boucle for-each, chaque élément est accédé.
Le code WebDriver ci-dessous vérifie chaque lien de la page d'accueil de Mercury Tours pour déterminer ceux qui fonctionnent et ceux 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. *;classe publique P1 {public static void main (String [] args) {String baseUrl = "http://demo.guru99.com/test/newtours/";System.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");Pilote WebDriver = nouveau ChromeDriver ();String underConsTitle = "En 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;// extraire les textes de lien de chaque élément de lienpour (WebElement e: linkElements) {linkTexts [i] = e.getText ();i ++;}// tester chaque lienfor (String t: linkTexts) {driver.findElement (By.linkText (t)). click ();if (driver.getTitle (). equals (underConsTitle)) {System.out.println ("\" "+ t +" \ ""+ "est en construction.");} autre {System.out.println ("\" "+ t +" \ ""+ "fonctionne.");}driver.navigate (). back ();}driver.quit ();}}
La sortie doit être similaire à celle indiquée ci-dessous.
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 vierge car la 1ère action ouvre un navigateur. Le pilote ne pourra pas trouver tous les autres liens dans un navigateur vide. Ainsi, IDE lèvera une exception et le reste du code ne s'exécutera pas. Cela peut être facilement géré en utilisant une boucle If.