Como lidar com a chamada AJAX no Selenium Webdriver

Índice:

Anonim

O que é Ajax?

AJAX significa Asynchronous JavaScript & XML e permite que a página da Web recupere pequenas quantidades de dados do servidor sem recarregar a página inteira.

Ajax é uma técnica usada para criar páginas da web rápidas e dinâmicas. Essa técnica é assíncrona e usa uma combinação de Javascript e XML.

Ele atualizará a (s) parte (s) de uma página da web sem recarregar a página inteira.

Alguns dos aplicativos famosos que usam a técnica AJAX são Gmail, Google Maps, Facebook, Youtube, etc.

Neste tutorial, você aprenderá-

  • O que é Ajax?
  • Como funciona o Ajax?
  • Como lidar com a chamada Ajax usando o Selenium Webdriver
  • Desafios para lidar com a chamada Ajax no Selenium Webdriver

Como funciona o Ajax?

Por exemplo, ao clicar no botão enviar, o JavaScript fará uma solicitação ao servidor, interpretará o resultado e atualizará a tela atual sem recarregar a página da web.

  • Uma chamada Ajax é uma solicitação assíncrona iniciada pelo navegador que não resulta diretamente em uma transição de página. Isso significa que, se você disparar uma solicitação Ajax, o usuário ainda poderá trabalhar no aplicativo enquanto a solicitação aguarda uma resposta.
  • O AJAX envia solicitações HTTP do cliente para o servidor e, em seguida, processa a resposta do servidor, sem recarregar a página inteira. Portanto, quando você faz uma chamada AJAX, não tem certeza sobre o tempo que o servidor leva para enviar uma resposta .

Do ponto de vista de um testador, se você estiver verificando o conteúdo ou o elemento a ser exibido, será necessário esperar até obter a resposta. Durante a chamada AJAX, os dados são armazenados no formato XML e recuperados do servidor.

Como lidar com a chamada Ajax usando o Selenium Webdriver

O maior desafio em lidar com chamadas Ajax é saber o tempo de carregamento da página da web. Como o carregamento da página da web dura apenas uma fração de segundos, é difícil para o testador testar esse aplicativo por meio da ferramenta de automação. Para isso, o Selenium Webdriver deve usar o método wait nesta chamada Ajax.

Portanto, ao executar este comando de espera, o selenium suspenderá a execução do Caso de Teste atual e aguardará o valor esperado ou novo. Quando o novo valor ou campo aparecer, os casos de teste suspensos serão executados pelo Selenium Webdriver.

A seguir estão os métodos de espera que o Selenium Webdriver pode usar

  1. Thread.Sleep ()
  • Thread.Sleep () não é uma escolha sábia, pois suspende a thread atual pelo período de tempo especificado.
  • Em AJAX, você nunca pode ter certeza sobre o tempo de espera exato. Portanto, seu teste falhará se o elemento não aparecer dentro do tempo de espera. Além disso, aumenta a sobrecarga porque chamar Thread.sleep (t) faz com que o thread atual seja movido da fila de execução para a fila de espera.
  • Após o tempo 't' atingido, o thread atual passará da fila de espera para a fila de prontidão e, então, levará algum tempo para ser selecionado pela CPU e estar em execução.
  1. Espera implícita ()
  • Este método diz ao webdriver para esperar se o elemento não estiver disponível imediatamente, mas essa espera estará em vigor durante todo o tempo em que o navegador estiver aberto. Portanto, qualquer pesquisa pelos elementos na página pode levar o tempo que a espera implícita está configurada.
  1. Espera explícita ()
  • A espera explícita é usada para congelar a execução do teste até que uma determinada condição seja atendida ou que o tempo máximo expire.
  1. WebdriverWait
  • Pode ser usado para qualquer condição. Isso pode ser alcançado com WebDriverWait em combinação com ExpectedCondition
  • A melhor maneira de esperar por um elemento dinamicamente é verificar a condição a cada segundo e continuar para o próximo comando no script assim que a condição for atendida.

Mas o problema com todas essas esperas é que você precisa mencionar a unidade de tempo limite. E se o elemento ainda não estiver presente dentro do tempo? Portanto, há mais uma espera chamada Espera fluente.

  1. Espera Fluente
  • Esta é uma implementação da interface Wait com seu tempo limite e intervalo de pesquisa. Cada instância do FluentWait determina o tempo máximo de espera por uma condição, bem como a frequência com a qual verificar a condição.

Desafios para lidar com a chamada Ajax no Selenium Webdriver

  • Usar o comando "pause" para lidar com chamadas Ajax não é totalmente confiável. O tempo de pausa longo torna o teste inaceitavelmente lento e aumenta o tempo de teste. Em vez disso, "waitforcondition" será mais útil no teste de aplicativos Ajax.
  • É difícil avaliar o risco associado a determinados aplicativos Ajax
  • Dada total liberdade aos desenvolvedores para modificar a aplicação Ajax torna o processo de teste desafiador
  • A criação de uma solicitação de teste automatizada pode ser difícil para ferramentas de teste, já que o aplicativo AJAX geralmente usa codificação ou técnica de serialização diferente para enviar dados POST.

Um exemplo para o manuseio de Ajax

import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;import org.openqa.selenium.support.ui.ExpectedConditions;import org.openqa.selenium.support.ui.WebDriverWait;import org.testng.Assert;import org.testng.annotations.BeforeClass;import org.testng.annotations.Test;public class Ajaxdemo {URL da string privada = "http://demo.guru99.com/test/ajax.html";Driver WebDriver;WebDriverWait wait;@Antes da aulapublic void setUp () {System.setProperty ("webdriver.chrome.driver", ". \\ chromedriver.exe");// cria instância do Chromedriver = novo ChromeDriver ();driver.manage (). window (). maximize ();driver.navigate (). to (URL);}@Testepublic void test_AjaxExample () {Por container = By.cssSelector (". Container");esperar = novo WebDriverWait (driver, 5);wait.until (ExpectedConditions.presenceOfElementLocated (contêiner));// Obtenha o texto antes de realizar uma chamada ajaxWebElement noTextElement = driver.findElement (By.className ("radiobutton"));String textBefore = noTextElement.getText (). Trim ();// Clique no botão de rádiodriver.findElement (By.id ("sim")). click ();// Clique no botão Verificardriver.findElement (By.id ("buttoncheck")). click ();/ * Obtenha o texto após a chamada ajax * /WebElement TextElement = driver.findElement (By.className ("radiobutton"));wait.until (ExpectedConditions.visibilityOf (TextElement));String textAfter = TextElement.getText (). Trim ();/ * Verifique os dois textos antes da chamada ajax e após a chamada ajax. * /Assert.assertNotEquals (textBefore, textAfter);System.out.println ("Chamada Ajax realizada");StringesperadoText = "O botão de rádio está marcado e seu valor é Sim";/ * Verifique o texto esperado com o texto atualizado após a chamada de ajax * /Assert.assertEquals (textAfter, expectedText);driver.close ();}}

Resumo:

  • O AJAX permite que a página da Web recupere pequenas quantidades de dados do servidor sem recarregar a página inteira.
  • Para testar o aplicativo Ajax, diferentes métodos de espera devem ser aplicados
    • ThreadSleep
    • Espera implícita
    • Espera explícita
    • WebdriverWait
    • Espera Fluente
  • A criação de uma solicitação de teste automatizada pode ser difícil para ferramentas de teste, já que o aplicativo AJAX geralmente usa codificação ou técnica de serialização diferente para enviar dados POST.