Como encontrar links / links quebrados usando o Selenium Webdriver

Índice:

Anonim

O que são links quebrados?

Links quebrados são links ou URLs inacessíveis. Eles podem estar inativos ou não funcionando devido a algum erro do servidor

Um URL sempre terá um status com 2xx, que é válido. Existem diferentes códigos de status HTTP com finalidades diferentes. Para uma solicitação inválida, o status HTTP é 4xx e 5xx.

A classe 4xx de código de status é principalmente para erros do lado do cliente e a classe 5xx de códigos de status é principalmente para o erro de resposta do servidor.

Provavelmente não poderemos confirmar se esse link está funcionando ou não até clicarmos e confirmarmos.

Por que você deve verificar links quebrados?

Você deve sempre se certificar de que não haja links quebrados no site, pois o usuário não deve cair em uma página de erro.

O erro ocorre se as regras não são atualizadas corretamente ou os recursos solicitados não existem no servidor.

A verificação manual de links é uma tarefa tediosa, porque cada página da web pode ter um grande número de links e o processo manual deve ser repetido para todas as páginas.

Um script de automação usando Selenium que irá automatizar o processo é uma solução mais adequada.

Como verificar links quebrados e imagens

Para verificar os links quebrados, você precisará seguir os seguintes passos.

  1. Colete todos os links na página da web com base na tag .
  2. Envie a solicitação HTTP para o link e leia o código de resposta HTTP.
  3. Descubra se o link é válido ou quebrado com base no código de resposta HTTP.
  4. Repita isso para todos os links capturados.

Código para encontrar os links quebrados em uma página da web

Abaixo está o código do driver da web que testa nosso caso de uso:

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 {driver WebDriver estático privado = null;public static void main (String [] args) {// TODO stub do método gerado automaticamenteString homePage = "http://www.zlti.com";String url = "";HttpURLConnection huc = null;int respCode = 200;driver = novo ChromeDriver ();driver.manage (). window (). maximize ();driver.get (homePage);Listar links  = 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 ("URL não está configurado para tag âncora ou está vazio");Prosseguir;}if (! url.startsWith (homePage)) {System.out.println ("URL pertence a outro domínio, pulando-o.");Prosseguir;}tentar {huc = (HttpURLConnection) (novo URL (url) .openConnection ());huc.setRequestMethod ("HEAD");huc.connect ();respCode = huc.getResponseCode ();if (respCode> = 400) {System.out.println (url + "é um link quebrado");}outro{System.out.println (url + "é um link válido");}} catch (MalformedURLException e) {// TODO bloco de captura gerado automaticamentee.printStackTrace ();} catch (IOException e) {// TODO bloco de captura gerado automaticamentee.printStackTrace ();}}driver.quit ();}}

Explicando o exemplo de código

Etapa 1: importar pacotes

Importe o pacote abaixo, além dos pacotes padrão:

import java.net.HttpURLConnection;

Usando os métodos neste pacote, podemos enviar solicitações HTTP e capturar códigos de resposta HTTP da resposta.

Etapa 2: colete todos os links na página da web

Identifique todos os links em uma página da web e armazene-os na Lista.

Listar links  = driver.findElements (By.tagName ("a"));

Obtenha o Iterator para percorrer a Lista.

Iterator  it = links.iterator ();

Etapa 3: Identificação e validação de URL

Nesta parte, verificaremos se o URL pertence ao domínio de terceiros ou se o URL está vazio / nulo.

Obtenha o href da tag âncora e armazene-o na variável url.

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

Verifique se o URL é nulo ou vazio e pule as etapas restantes se a condição for satisfeita.

if (url == null || url.isEmpty ()) {System.out.println ("URL não está configurado para tag âncora ou está vazio");Prosseguir;}

Verifique se o URL pertence a um domínio principal ou a terceiros. Pule as etapas restantes se pertencer a um domínio de terceiros.

 if (! url.startsWith (homePage)) {System.out.println ("URL pertence a outro domínio, pulando-o.");Prosseguir;}

Etapa 4: enviar solicitação http

A classe HttpURLConnection tem métodos para enviar solicitação HTTP e capturar o código de resposta HTTP. Portanto, a saída do método openConnection () (URLConnection) é convertida em tipo para HttpURLConnection.

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

Podemos definir o tipo de solicitação como "HEAD" em vez de "GET". Para que apenas os cabeçalhos sejam retornados e não o corpo do documento.

huc.setRequestMethod ("HEAD");

Ao invocar o método connect (), a conexão real com o url é estabelecida e a solicitação é enviada.

huc.connect ();

Etapa 5: Validando Links

Usando o método getResponseCode (), podemos obter o código de resposta para a solicitação

respCode = huc.getResponseCode ();

Com base no código de resposta, tentaremos verificar o status do link.

if (respCode> = 400) {System.out.println (url + "é um link quebrado");}outro{System.out.println (url + "é um link válido");}

Assim, podemos obter todos os links da página web e imprimir se os links são válidos ou quebrados.

Espero que este tutorial ajude você a verificar links quebrados usando selênio.

Como obter TODOS os links de uma página da web

Um dos procedimentos comuns no teste da web é testar se todos os links presentes na página estão funcionando. Isso pode ser feito convenientemente usando uma combinação do Java for-each loop , método findElements () e By.tagName ("a") .

O método findElements () retorna uma lista de Elementos da Web com a tag a. Usando um loop for-each, cada elemento é acessado.

O código WebDriver abaixo verifica cada link da página inicial da Mercury Tours para determinar aqueles que estão funcionando e aqueles que ainda estão em construção.

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 = "http://demo.guru99.com/test/newtours/";System.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");Driver WebDriver = novo ChromeDriver ();String underConsTitle = "Em construção: Mercury Tours";driver.manage (). timeouts (). implicitlyWait (5, TimeUnit.SECONDS);driver.get (baseUrl);List  linkElements = driver.findElements (By.tagName ("a"));String [] linkTexts = novo String [linkElements.size ()];int i = 0;// extraia os textos do link de cada elemento do linkpara (WebElement e: linkElements) {linkTexts [i] = e.getText ();i ++;}// teste cada linkpara (String t: linkTexts) {driver.findElement (By.linkText (t)). click ();if (driver.getTitle (). equals (underConsTitle)) {System.out.println ("\" "+ t +" \ ""+ "está em construção.");} outro {System.out.println ("\" "+ t +" \ ""+ "está funcionando.");}driver.navigate (). back ();}driver.quit ();}}

A saída deve ser semelhante à indicada abaixo.

  • O acesso aos links de imagens é feito usando os métodos By.cssSelector () e By.xpath ().
  • Solução de problemas

    Em um caso isolado, o primeiro link acessado pelo código poderia ser o Link "Home". Nesse caso, a ação driver.navigate.back () mostrará uma página em branco, pois a primeira ação é abrir um navegador. O driver não conseguirá encontrar todos os outros links em um navegador vazio. Portanto, o IDE lançará uma exceção e o restante do código não será executado. Isso pode ser facilmente tratado usando um loop If.