Como encontrar links quebrados em Selênio
Antes de discutir como encontrar links quebrados usando Selenium WebDriver, vamos abordar uma questão ainda mais fundamental.
o que são links quebrados?
para começar, um link é um objeto HTML que permite aos usuários migrar de uma página da web para outra quando clicam nele. É um meio de navegar entre diferentes páginas da web na internet.
um link quebrado, também chamado de link morto, é aquele que não funciona, ou seja, não redireciona para a página da web para a qual se destina. Isso geralmente ocorre porque o site ou página da web específica está inativo ou não existe. Quando alguém clica em um link quebrado, uma mensagem de erro é exibida.
links quebrados podem existir devido a algum tipo de erro do servidor, que, por sua vez, faz com que a página correspondente funcione mal e não seja exibida. Um URL válido terá um código de status HTTP 2XX. Links quebrados, que são essencialmente solicitações HTTP inválidas, têm códigos de status 4xx e 5xx.
o código de status 4xx refere-se a um erro do lado do cliente, enquanto o código de status 5xx geralmente aponta para um erro de resposta do servidor.
Códigos de Status HTTP para Links Quebrados
Código de Status HTTP | Definição |
---|---|
400 (Bad Request) | Server não é possível processar o pedido, conforme URL está incorreta |
400 (Solicitar Ruim – Ruim Host) | o Servidor não consegue processar o pedido, como nome de host inválido |
400 (Solicitar Ruim – Ruim URL): | o servidor não pode processar a solicitação, pois o URL é de formato incorreto; caracteres ausentes, como colchetes, barras, etc. |
400 (Bad Request – Vazio) | Resposta retornada pelo servidor é vazio, sem conteúdo & nenhum código de resposta |
400 (Bad Request – Timeout) | HTTP solicitações de ter esgotado |
400 (Bad Request – Reset) | Servidor não consegue processar o pedido, pois está ocupada com o processamento de pedidos de outros ou que tenha sido configurado incorretamente pelo proprietário do site |
404 (Página Não Encontrada) | Página não está disponível no servidor |
403 (Proibido) | Servidor se recusa a cumprir a solicitação como autorização é necessária |
410 (Gone) | a página desapareceu. Este código é mais permanente do que 404 |
408 (tempo limite da solicitação) | o servidor expirou aguardando a solicitação. |
503 (Serviço indisponível) | o servidor está temporariamente sobrecarregado e não pode processar a solicitação |
por que verificar links quebrados no selênio?
se um usuário clicar em um link quebrado, ele será direcionado para uma página de erro. Isso obviamente contribui para a experiência do usuário abaixo da média. Links quebrados derrotam o propósito de ter o site em primeiro lugar porque os usuários não conseguem encontrar as informações ou serviços que estão procurando.
cada link em um site deve ser testado para garantir que ele esteja funcionando conforme o esperado. No entanto, dado que a maioria dos sites tem centenas (às vezes, milhares) de links necessários para fazê-los funcionar, o teste manual de cada link exigiria quantidades excessivas de tempo, esforço e recursos. Além disso, com o teste automatizado de selênio sendo uma opção, seria completamente desnecessário.
Leia Mais: Como tirar Screenshots em Selênio
Razões Comuns para Links Quebrados
- 404 Página Não Encontrada A página da web de destino foi removido pelo proprietário
- 400 Bad Request – O servidor não pode processar a solicitação HTTP acionado pelo link porque o endereço da URL solicitada é errado
- Devido ao usuário as configurações de firewall, o navegador não é possível acessar a página da web de destino
- O link está incorreto
Como identificar links quebrados no Selenium WebDriver
Para seleção de links quebrados em Selênio, o processo é simples. Em uma página da web, os hiperlinks são implementados usando a tag HTML Anchor (<a >). Tudo o que o script precisa fazer é localizar todas as tags de âncora em uma página da web, obter os URLs correspondentes e executar os links para verificar se algum deles está quebrado.
Use as seguintes etapas para identificar links quebrados em Selênio
- Recolher todos os links presentes em uma página da web com base em <um> tag
- Enviar solicitação HTTP para cada link
- Verificar o código de resposta HTTP
- Determinar se o link é válido, ou quebrado, com base no código de resposta HTTP
- Repita o processo para todos os links capturados com o primeiro passo
Se você está se perguntando como encontrar imagens quebradas usando Selenium WebDriver, use o mesmo processo.
Leia Mais: Como executar duplo clique em Selenium
encontrar links quebrados em Selenium: exemplo
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();}}
Execute testes de Selenium em dispositivos reais gratuitamente
vamos passar pelo código para uma compreensão mais próxima de sua funcionalidade.
1. Importar pacotes
importe o pacote abaixo junto com pacotes padrão:
import java.net.HttpURLConnection;
os métodos neste pacote permitem que o testador envie solicitações HTTP e capture códigos de resposta HTTP quando eles são retornados pelo código.
2. Coletar todos os links na página da web
Encontrar todos os links na página da web e colocá-los em uma lista:
List<WebElement> links = driver.findElements(By.tagName("a"));
Obter Iterador para percorrer a lista de links:
Iterator<WebElement> it = links.iterator();
3: Identificar e Validar URLs
Este passo é verificar se uma determinada URL pertence a um domínio de terceiros ou se ele é vazio e nulo.
o código abaixo irá recuperar o href da tag âncora e armazená-lo na variável URL.
url = it.next().getAttribute("href");
se o URL for nulo ou vazio, pule as etapas após isso.
if(url == null || url.isEmpty()){System.out.println("URL is either not configured for anchor tag or it is empty");continue;}
se o URL pertencer ao Domínio principal, continue. Se pertencer a um domínio de terceiros, pule as etapas após isso.
if(!url.startsWith(homePage)){System.out.println("URL belongs to another domain, skipping it.");continue;}
4. Enviar solicitação HTTP
os métodos na classe HttpURLConnection enviarão solicitações HTTP e capturarão o código de resposta HTTP. Portanto, a saída do método openConnection () (URLConnection) é do tipo casted para HttpURLConnection.
huc = (HttpURLConnection)(new URL(url).openConnection());
se os testadores definirem o tipo de solicitação como” HEAD “em vez de” GET”, apenas os cabeçalhos serão retornados, não o corpo do documento.
huc.setRequestMethod("HEAD");
quando o testador invoca o método connect (), a conexão real com o URL é estabelecida e a solicitação HTTP é enviada.
huc.connect();
5. Valide Links
Use o método getResponseCode () para obter o código de resposta HTTP para a solicitação HTTP enviada anteriormente.
respCode = huc.getResponseCode();
verifique o status do link (quebrado ou não) com base no código de resposta
if(respCode >= 400){System.out.println(url+" is a broken link");}else{System.out.println(url+" is a valid link");}
encontrar links quebrados no Selenium é parte integrante do desenvolvimento e teste do site. Usando o método descrito neste artigo, os testadores podem identificar links com defeito de forma rápida e correta. Permitir que links quebrados passem para o estágio de produção prejudicaria gravemente a experiência do Usuário e deve ser evitado com extrema precisão. É por isso que saber como testar links quebrados no Selenium é uma parte importante do kit de ferramentas de um testador.