JavaScriptExecutor no Selenium WebDriver com Exemplo

Índice:

Anonim

O que é JavaScriptExecutor?

JavaScriptExecutor é uma interface que ajuda a executar JavaScript através do Selenium Webdriver. JavaScriptExecutor fornece dois métodos "executescript" e "executeAsyncScript" para executar javascript na janela selecionada ou na página atual.

Neste tutorial, você aprenderá -

  • O que é JavaScriptExecutor?
  • Por que precisamos do JavaScriptExecutor?
  • Métodos JavaScriptExecutor
  • Exemplo de executeAsyncScript
    • Exemplo 1: Executando uma suspensão no navegador em teste.
  • Exemplo de executeScript
    • 1) Exemplo: Clique em um botão para fazer o login e gerar a janela de Alerta
    • 2) Exemplo: Capture dados de rascunho e navegue para páginas diferentes
    • 3) Exemplo: Rolar para baixo usando

Por que precisamos do JavaScriptExecutor?

No Selenium Webdriver, localizadores como XPath, CSS, etc. são usados ​​para identificar e executar operações em uma página da web.

Caso esses localizadores não funcionem, você pode usar o JavaScriptExecutor. Você pode usar JavaScriptExecutor para realizar uma operação desejada em um elemento da web.

Selenium oferece suporte a javaScriptExecutor. Não há necessidade de um plug-in ou complemento extra. Você só precisa importar ( org.openqa.selenium.JavascriptExecutor ) no script para usar o JavaScriptExecutor.

Métodos JavaScriptExecutor

  1. executeAsyncScript

Com o script assíncrono, sua página é renderizada mais rapidamente. Em vez de forçar os usuários a esperar o download de um script antes da renderização da página. Esta função executará uma parte assíncrona de JavaScript no contexto do quadro ou janela atualmente selecionado no Selenium. O JS assim executado é de thread único com várias funções de retorno de chamada que são executadas de forma síncrona.

  1. executeScript

Este método executa JavaScript no contexto do quadro ou janela atualmente selecionado no Selenium. O script usado neste método é executado no corpo de uma função anônima (uma função sem um nome). Também podemos passar argumentos complicados para ele.

O script pode retornar valores. Os tipos de dados retornados são

  • boleano
  • Longo
  • Fragmento
  • Lista
  • WebElement.

A sintaxe básica para JavascriptExecutor é fornecida abaixo:

Sintaxe:

JavascriptExecutor js = (JavascriptExecutor) driver;js.executeScript (Script, Argumentos);
  • Script - este é o JavaScript que precisa ser executado.
  • Argumentos - são os argumentos do script. É opcional.

Exemplo de executeAsyncScript

Usar o executeAsyncScript ajuda a melhorar o desempenho do seu teste. Ele permite escrever o teste mais como uma codificação normal.

O execSync bloqueia outras ações realizadas pelo navegador Selenium, mas execAsync não bloqueia a ação. Ele enviará um retorno de chamada para o conjunto de testes do lado do servidor assim que o script for concluído. Isso significa que tudo dentro do script será executado pelo navegador e não pelo servidor.

Exemplo 1: Executando uma suspensão no navegador em teste.

Neste cenário, usaremos o site de demonstração "Guru99" para ilustrar executeAsyncScript. Neste exemplo, você vai

  • Abra o navegador.
  • Abra o site "http://demo.guru99.com/V4/".
  • O aplicativo aguarda 5 segundos para realizar outra ação.

Etapa 1) Capture a hora de início antes de esperar 5 segundos (5000 milissegundos) usando o método executeAsyncScript ().

Etapa 2) Em seguida, use executeAsyncScript () para aguardar 5 segundos.

Etapa 3) Em seguida, obtenha a hora atual.

Etapa 4) Subtrair (hora atual - hora de início) = hora passada.

Etapa 5) Verifique se a saída deve exibir mais de 5000 milissegundos

import java.util.concurrent.TimeUnit;import org.openqa.selenium.JavascriptExecutor;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;public class JavaSE_Test {@Testepublic void Login (){Driver WebDriver = novo FirefoxDriver ();// Criando o objeto de interface JavascriptExecutor por Casting de tipoJavascriptExecutor js = (JavascriptExecutor) driver;// Lançamento do site.driver.get ("http://demo.guru99.com/V4/");// Maximize a janeladriver.manage (). window (). maximize ();// Defina o tempo limite do script para 20 segundosdriver.manage (). timeouts (). setScriptTimeout (20, TimeUnit.SECONDS);// Declare e defina a hora de iníciotempo_de_início longo = System.currentTimeMillis ();// Chame o método executeAsyncScript () para esperar 5 segundosjs.executeAsyncScript ("window.setTimeout (arguments [arguments.length - 1], 5000);");// Obtenha a diferença (currentTime - startTime) dos tempos.System.out.println ("Tempo passado: + (System.currentTimeMillis () - start_time));}}

Resultado: exibiu com sucesso o tempo decorrido por mais de 5 segundos (5000 milissegundos), conforme mostrado abaixo:

[TestNG] Em execução:C: \ Users \ gauravn \ AppData \ Local \ Temp \ testng-eclipse-387352559 \ testng-customuite.xmllog4j: WARN Nenhum appender foi encontrado para o logger (org.apache.http.client.protocol.RequestAddCookies).log4j: WARN Inicialize o sistema log4j corretamente.log4j: WARN Consulte http://logging.apache.org/log4j/1.2/faq.html#noconfig para obter mais informações.Tempo passado: 5022PASSADO: Login===================================================Teste padrãoTestes executados: 1, Falhas: 0, Saltos: 0===================================================

Exemplo de executeScript

Para executeScript, veremos três exemplos diferentes, um por um.

1) Exemplo: Clique em um botão para fazer o login e gerar a janela de Alerta usando JavaScriptExecutor.

Neste cenário, usaremos o site de demonstração "Guru99" para ilustrar o JavaScriptExecutor. Neste exemplo,

  • Abra o navegador da web
  • abra o site "http://demo.guru99.com/V4/" e
  • login com credenciais
  • Exibir janela de alerta no login bem-sucedido.
import org.openqa.selenium.By;import org.openqa.selenium.JavascriptExecutor;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;public class JavaSE_Test {@Testepublic void Login (){Driver WebDriver = novo FirefoxDriver ();// Criando o objeto de interface JavascriptExecutor por Casting de tipoJavascriptExecutor js = (JavascriptExecutor) driver;// Lançamento do site.driver.get ("http://demo.guru99.com/V4/");Botão WebElement = driver.findElement (By.name ("btnLogin"));// Faça login no Guru99driver.findElement (By.name ("uid")). sendKeys ("mngr34926");driver.findElement (By.name ("senha")). sendKeys ("amUpenu");// Executar Clique no botão LOGIN usando JavascriptExecutorjs.executeScript ("arguments [0] .click ();", botão);// Para gerar a janela de Alerta usando JavascriptExecutor. Exibir a mensagem de alertajs.executeScript ("alert ('Bem-vindo ao Guru99');");}}

Saída: quando o código é executado com sucesso. Você vai observar

  • Clique com sucesso no botão de login e o
  • A janela de alerta será exibida (veja a imagem abaixo).

2) Exemplo: Capture Scrape Data e navegue para páginas diferentes usando JavaScriptExecutor.

Execute o script de selênio abaixo. Neste exemplo,

  • Lance o site
  • Busque os detalhes do site como URL do site, nome do título e nome de domínio do site.
  • Em seguida, navegue para uma página diferente.
import org.openqa.selenium.JavascriptExecutor;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;public class JavaSE_Test {@Testepublic void Login (){Driver WebDriver = novo FirefoxDriver ();// Criando o objeto de interface JavascriptExecutor por Casting de tipoJavascriptExecutor js = (JavascriptExecutor) driver;// Lançamento do site.driver.get ("http://demo.guru99.com/V4/");// Buscando o nome de domínio do site. Tostring () muda o objeto para o nome.String DomainName = js.executeScript ("return document.domain;"). ToString ();System.out.println ("Nome de domínio do site =" + DomainName);// Buscando o URL do site. Tostring () muda o objeto para o nomeString url = js.executeScript ("return document.URL;"). ToString ();System.out.println ("URL do site =" + url);// O método document.title busca o nome do título do site. Tostring () muda o objeto para o nomeString TitleName = js.executeScript ("return document.title;"). ToString ();System.out.println ("Título da página =" + TitleName);// Navegue para a nova página, ou seja, para gerar a página de acesso. (lançar novo url)js.executeScript ("window.location = 'http://demo.guru99.com/'");}}

Saída: Quando o código acima é executado com sucesso, ele irá buscar os detalhes do site e navegar para uma página diferente, conforme mostrado abaixo.

[TestNG] Em execução:C: \ Users \ gauravn \ AppData \ Local \ Temp \ testng-eclipse-467151014 \ testng-customuite.xmllog4j: WARN Nenhum appender foi encontrado para o logger (org.apache.http.client.protocol.RequestAddCookies).log4j: WARN Inicialize o sistema log4j corretamente.log4j: WARN Consulte http://logging.apache.org/log4j/1.2/faq.html#noconfig para obter mais informações.Nome de domínio do site = demo.guru99.comURL do site = http://demo.guru99.com/V4/Título da página = Página inicial do banco Guru99PASSADO: Login===================================================Teste padrãoTestes executados: 1, Falhas: 0, Saltos: 0=================================================== 

3) Exemplo: Role para baixo usando JavaScriptExecutor.

Execute o script de selênio abaixo. Neste exemplo,

  • Lance o site
  • Role para baixo em 600 pixels
import org.openqa.selenium.JavascriptExecutor;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;public class JavaSE_Test {@Testepublic void Login (){Driver WebDriver = novo FirefoxDriver ();// Criando o objeto de interface JavascriptExecutor por Casting de tipoJavascriptExecutor js = (JavascriptExecutor) driver;// Lançamento do site.driver.get ("http://moneyboats.com/");// Maximize a janeladriver.manage (). window (). maximize ();// Rolagem vertical para baixo em 600 pixelsjs.executeScript ("window.scrollBy (0,600)");}}

Saída : Quando o código acima for executado, ele rolará para baixo em 600 pixels (veja a imagem abaixo).

Resumo:

JavaScriptExecutor é usado quando o Selenium Webdriver falha ao clicar em qualquer elemento devido a algum problema.

  • JavaScriptExecutor fornece dois métodos "executescript" e "executeAsyncScript" para manipular.
  • Executou o JavaScript usando Selenium Webdriver.
  • Ilustrado como clicar em um elemento por meio do JavaScriptExecutor, se o selênio falhar ao clicar no elemento devido a algum problema.
  • Gerou a janela 'Alerta' usando JavaScriptExecutor.
  • Navegou para a página diferente usando JavaScriptExecutor.
  • Rolou a janela para baixo usando JavaScriptExecutor.
  • URL, título e nome de domínio buscados usando JavaScriptExecutor.