febrero 6, 2022

Cómo encontrar enlaces rotos en Selenium

Índice

Antes de discutir cómo encontrar enlaces rotos usando Selenium WebDriver, abordemos una pregunta más fundamental.

¿Qué son los Enlaces rotos?

Para empezar, un enlace es un objeto HTML que permite a los usuarios migrar de una página web a otra cuando hacen clic en ella. Es un medio para navegar entre diferentes páginas web en internet.

Un enlace roto, también a menudo llamado enlace muerto, es aquel que no funciona, p. ej. no redirige a la página web a la que está destinado. Esto generalmente ocurre porque el sitio web o la página web en particular está inactiva o no existe. Cuando alguien hace clic en un enlace roto, se muestra un mensaje de error.

Los enlaces rotos pueden existir debido a algún tipo de error del servidor, que, a su vez, hace que la página correspondiente funcione mal y no se muestre. Una URL válida tendrá un código de estado HTTP 2xx. Los enlaces rotos, que son esencialmente solicitudes HTTP inválidas, tienen códigos de estado 4xx y 5xx.

El código de estado 4xx se refiere a un error del lado del cliente, mientras que el código de estado 5xx generalmente apunta a un error de respuesta del servidor.

Códigos de Estado HTTP para Enlaces Rotos

Código de Estado HTTP Definición
400 (Bad Request) Servidor no puede procesar la solicitud de URL es incorrecta
400 (Bad Request – Mal Anfitrión) Servidor no puede procesar la solicitud como nombre de host no es válido
400 (Bad Request – Bad URL): El servidor no puede procesar la solicitud ya que la URL tiene un formato incorrecto; faltan caracteres como corchetes, barras, etc.
400 (Solicitud incorrecta-Vacía) La respuesta devuelta por el servidor está vacía sin contenido & sin código de respuesta
400 (Solicitud incorrecta-Tiempo de espera) Las solicitudes HTTP han expirado
400 ( El servidor no puede procesar la solicitud, ya que está ocupado procesando otras solicitudes o ha sido configurado incorrectamente por el propietario del sitio
404 (Página no encontrada) La página no está disponible en el servidor
403 (Prohibido) El servidor se niega a cumplir solicitud como se requiere autorización
410 (Se ha ido) La página se ha ido. Este código es más permanente que 404
408 (Tiempo de espera de la solicitud) El servidor tiene tiempo de espera esperando la solicitud.
503 (Servicio no Disponible) Servidor está sobrecargado temporalmente y no puede procesar la solicitud

por Qué comprobar Enlaces Rotos en Selenio?

Si un usuario hace clic en un enlace roto, se le dirigirá a una página de error. Obviamente, esto contribuye a una experiencia de usuario por debajo del par. Los enlaces rotos frustran el propósito de tener el sitio web en primer lugar porque los usuarios no pueden encontrar la información o el servicio que están buscando.

Cada enlace de un sitio web debe ser probado para garantizar que funciona como se espera. Sin embargo, dado que la mayoría de los sitios web tienen cientos (a veces, miles) de enlaces necesarios para que funcionen, las pruebas manuales de cada enlace requerirían cantidades excesivas de tiempo, esfuerzo y recursos. Además, con las pruebas automatizadas de selenio como una opción, sería completamente innecesario.

Leer Más: Cómo tomar capturas de pantalla en Selenium

Razones comunes para Enlaces rotos

  • 404 Página no encontrada – La página web de destino ha sido eliminada por el propietario
  • 400 Solicitud incorrecta – El servidor no puede procesar la solicitud HTTP activada por el enlace porque la dirección URL solicitada es incorrecta
  • Debido a la configuración del firewall del usuario, el navegador no puede acceder a la página web de destino
  • El enlace está mal escrito

Cómo identificar enlaces rotos en Selenium WebDriver

Para verificar enlaces rotos en Selenio, el proceso es simple. En una página web, los hipervínculos se implementan utilizando la etiqueta Ancla HTML (< a>). Todo lo que el script necesita hacer es localizar cada etiqueta de anclaje en una página web, obtener las URL correspondientes y correr a través de los enlaces para verificar si alguno de ellos está roto.

Siga los siguientes pasos para identificar enlaces rotos en Selenium

  1. Recopilar todos los enlaces presentes en una página web en función de la etiqueta <a>
  2. Enviar solicitud HTTP para cada enlace
  3. Verificar el código de respuesta HTTP
  4. Determinar si el enlace es válido o está roto en función de código de respuesta
  5. Repita el proceso para todos los enlaces capturados con el primer paso

Si se pregunta cómo encontrar imágenes rotas con Selenium WebDriver, utilice el mismo proceso.

Leer Más: Cómo realizar Doble clic en Selenium

Encontrar enlaces rotos en Selenium: Ejemplo

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();}}

Ejecutar pruebas de Selenium en Dispositivos Reales de forma Gratuita

Repasemos el código para comprender mejor su funcionalidad.

1. Importar paquetes

Importar el paquete a continuación junto con los paquetes predeterminados:

import java.net.HttpURLConnection;

Los métodos de este paquete permiten al probador enviar solicitudes HTTP y capturar códigos de respuesta HTTP cuando son devueltos por el código.

2. Recopila todos los enlaces de la página web

Encuentra todos los enlaces de la página web y colócalos en una lista:

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

Obtener Iterador para moverse por la lista de enlaces:

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

3: Identificar y Validar URL

Este paso consiste en comprobar si una URL determinada pertenece a un dominio de terceros o si está vacía/nula.

El siguiente código recuperará el href de la etiqueta de anclaje y lo almacenará en la variable URL.

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

Si la URL es nula o vacía, omita los pasos siguientes.

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

Si la URL pertenece al dominio principal, continúe. Si pertenece a un dominio de terceros, omita los pasos siguientes.

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

4. Enviar solicitud HTTP

Los métodos de la clase HttpURLConnection enviarán solicitudes HTTP y capturarán el código de respuesta HTTP. Por lo tanto, la salida del método openConnection () (URLConnection) es de tipo casted a HttpURLConnection.

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

Si los evaluadores establecen el tipo de solicitud como » HEAD «en lugar de» GET», solo se devolverán los encabezados, no el cuerpo del documento.

huc.setRequestMethod("HEAD");

Cuando el probador invoca el método connect (), se establece la conexión real a la URL y se envía la solicitud HTTP.

huc.connect();

5. Validar enlaces

Utilice el método getResponseCode () para obtener el código de respuesta HTTP para la solicitud HTTP enviada previamente.

respCode = huc.getResponseCode();

Comprobar el estado de los enlaces (rotos o no) en función del código de respuesta

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

Encontrar enlaces rotos en Selenium es una parte integral del desarrollo y las pruebas del sitio web. Mediante el método descrito en este artículo, los evaluadores pueden identificar enlaces que funcionan mal de forma rápida y correcta. Permitir que los enlaces rotos pasen a la etapa de producción dañaría gravemente la experiencia del usuario y debe evitarse con extrema minuciosidad. Esta es la razón por la que saber cómo probar enlaces rotos en Selenio es una parte importante del conjunto de herramientas de un probador.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.