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