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
- 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.
- 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.
- 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.
- 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.
- 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.