Aula de Robô em Selenium Driver da Web

Em que consiste a classe Robot Selenium?

Classe de Robô in Selenium é usado para permitir testes automatizados para implementações de Java plataforma. Ele gera eventos de entrada em sistemas nativos para automação de testes, demonstrações de execução automática e outras aplicações onde os usuários precisam de controle de mouse e teclado. A classe Robot é fácil de implementar e pode ser facilmente integrada a uma estrutura automatizada.

Por que aula de robô?

Classe de Robô é utilizado em Selenium porque, em certo Selenium testes de automação, os usuários precisam controlar o teclado ou o mouse para interagir com janelas do sistema operacional, como pop-ups de download, pop-ups de impressão, etc., e aplicativos nativos como bloco de notas, calculadora, etc. Selenium O Webdriver não pode lidar com esses pop-ups/aplicativos, então em Java versão 1.3, foi introduzida uma classe de robô que pode lidar com pop-ups/aplicativos do sistema operacional.

Documentação da classe do robô

A Documentação da classe do robô in Selenium ajuda os usuários a entender a definição básica, sintaxe e uso de todos os métodos e funções disponíveis na classe do robô em Java Pacote AWT. Os usuários podem visualizar a documentação no Oficial Oracle site do produto. Os usuários também podem criar eles próprios a documentação em sua máquina local.

Para criar a documentação na máquina local, siga as etapas abaixo-

Passo 1) Você encontrará o arquivo src.zip na pasta JDK. Copie src.zip e extraia o mesmo em alguma outra pasta ou diretório (digamos D: ou E: )

Documentação da classe do robô

Passo 2) Extraia a pasta src e navegue até (caminho até a pasta src)/src/java/awt

Passo 3) Copie a localização atual da pasta awt e abra o prompt de comando.

Passo 4) No cmd, altere a localização do diretório atual para a pasta awt e digite 'javadoc *.java' conforme mostrado abaixo

Documentação da classe do robô

Aguarde um pouco para que o sistema processe, uma vez concluído você verá alguns arquivos HTML na pasta awt.

Passo 5) Abra index.html

Documentação da classe do robô

Passo 6) Aqui você tem a documentação completa do pacote awt, na barra de navegação esquerda clique no hiperlink 'Robot' (veja 1 marcado na imagem abaixo).

Documentação da classe do robô

Aqui você também pode ver todos os métodos e interfaces da Robot Class (Veja 2 marcados na imagem acima).

Métodos de classe de robô em Selenium e uso

Os métodos Robot Class podem ser usados ​​para interagir com eventos de teclado/mouse durante a automação do navegador. alternativamente AutoIT pode ser usado, mas sua desvantagem é que ele gera um arquivo executável (exe) que só funciona no Windows, por isso não é uma boa opção de uso.

Alguns métodos comumente usados ​​​​de Robot Class durante a automação da web:

Método 1: keyPress():

robot.keyPress (KeyEvent.VK_DOWN): Este método pressiona a tecla de seta para baixo do teclado

Método 2: mousePress():

robot.mousePress (InputEvent.BUTTON3_DOWN_MASK): Este método pressionará o botão direito do mouse.

Método 3: mouseMove():

robot.mouseMove(point.getX(), point.getY()): Isso moverá o ponteiro do mouse para as coordenadas X e Y especificadas.

Método 4: keyRelease():

robot.keyRelease (KeyEvent.VK_DOWN): Este método libera a tecla de seta para baixo do teclado

Método 5: mouseRelease():

robot.mouseRelease (InputEvent.BUTTON3_DOWN_MASK): Este método irá liberar o clique direito do mouse

Código de exemplo para automatizar casos de uso comuns usando Robot Class

  • Vejamos o exemplo do site http://spreadsheetpage.com/index.php/file/C35/P10/ onde depois de clicar em um elemento da web (.//a[@href=contains(text(),'yearly-calendar.xls']) um pop-up de download do sistema operacional aparece.
  • Para lidar com isso, usamos a classe Robot (criando uma instância da classe Robot em seu código, digamos Robô robô = novo Robô()). A classe Robot está presente no pacote AWT do JDK.
Tecla do teclado Forma
Para pressionar a tecla de seta para baixo usamos (robot.keyPress(KeyEvent.VK_DOWN))
Para pressionar a tecla TAB usamos (robot.keyPress(KeyEvent.VK_TAB))
Para pressionar a tecla Enter usamos (robot.keyPress(KeyEvent.VK_ENTER))

Exemplo de classe de robô em Selenium

import java.awt.AWTException;	
import java.awt.Robot;	
import java.awt.event.KeyEvent;	
import org.openqa.selenium.By;	
import org.openqa.selenium.WebDriver;	
import org.openqa.selenium.firefox.FirefoxDriver;	

class Excercise1 {	

      public static void main(String[] args) throws AWTException, InterruptedException {	
           WebDriver driver = new FirefoxDriver();	
           driver.get("http://spreadsheetpage.com/index.php/file/C35/P10/"); // sample url	
           driver.findElement(By.xpath(".//a[@href=contains(text(),'yearly-calendar.xls')]")).click();	
           Robot robot = new Robot();  // Robot class throws AWT Exception	
           Thread.sleep(2000); // Thread.sleep throws InterruptedException	
           robot.keyPress(KeyEvent.VK_DOWN);  // press arrow down key of keyboard to navigate and select Save radio button	
           
           Thread.sleep(2000);  // sleep has only been used to showcase each event separately	
           robot.keyPress(KeyEvent.VK_TAB);	
           Thread.sleep(2000);	
           robot.keyPress(KeyEvent.VK_TAB);	
           Thread.sleep(2000);	
           robot.keyPress(KeyEvent.VK_TAB);	
           Thread.sleep(2000);	
           robot.keyPress(KeyEvent.VK_ENTER);	
       // press enter key of keyboard to perform above selected action	
     }	 
 }

Confira este vídeo para vê-lo em ação

Como executar o código da classe Robot usando TestNG

Já que agora você conhece os métodos básicos da classe Robot, vamos entender alguns métodos mais complexos –

Suponha que você não queira usar o método de clique por clicar no elemento web.

Nesses casos, você pode usar o método mouseMove da classe Robot.

Passo 1) O método mouseMove usa as coordenadas xey como parâmetros como robot.mouseMove(630, 420) onde 630 indica o eixo x e 420 indica o eixo y. Portanto, este método moverá o ponteiro do mouse do local atual para o ponto de interseção xey mencionado.

Passo 2) Em seguida, precisamos pressionar o botão do mouse. Podemos usar o método mousePress como robot.mousePress(InputEvent.BUTTON1_DOWN_MASK) .

Passo 3) Após pressionar, o mouse precisa ser liberado. Podemos usar robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK) para liberar o clique esquerdo do mouse.

Executando código usando testNG:

Executando código usando Teste requer dependência maven de testNG ou biblioteca referenciada de TestNG arquivo jar.

TestNG dependência do especialista:

<dependency>	
  <groupId>org.testng</groupId>
  <artifactId>testng</artifactId>	
  <version>6.1.1</version>	
</dependency>

Depois de adicionar a dependência maven ou o arquivo jar. Você precisa importar a anotação Test do testNG. Depois que tudo estiver pronto, basta clicar com o botão direito no código do programa e clicar em Run As e depois clicar em TestNG… e você verá que o código iniciará sua execução usando a API testNG.

Aqui está o código

import java.awt.AWTException;	
import java.awt.Robot;	
import java.awt.event.InputEvent;	
import java.awt.event.KeyEvent;	
import org.openqa.selenium.WebDriver;	
import org.openqa.selenium.firefox.FirefoxDriver;	
import org.testng.annotations.Test;	

public class Excersise1 {	

    @Test	
    public static void  execution() throws InterruptedException, AWTException {
        WebDriver driver = new FirefoxDriver();	
        driver.manage().window().maximize();	
        driver.get("http://spreadsheetpage.com/index.php/file/C35/P10/"); // sample url	
        Robot robot = new Robot();	
        robot.mouseMove(630, 420); // move mouse point to specific location	
        robot.delay(1500);        // delay is to make code wait for mentioned milliseconds before executing next step	
        robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); // press left click	
        robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); // release left click	
        robot.delay(1500);	
        robot.keyPress(KeyEvent.VK_DOWN); // press keyboard arrow key to select Save radio button	
        Thread.sleep(2000);	
        robot.keyPress(KeyEvent.VK_ENTER);	
        // press enter key of keyboard to perform above selected action	
    }	
}	

Confira este vídeo para vê-lo em ação

Benefícios da aula de robô

  1. Robot Class pode simular evento de teclado e mouse
  2. Robot Class pode ajudar no upload/download de arquivos ao usar o driver web Selenium
  3. Robot Class pode ser facilmente integrado à estrutura de automação atual (palavra-chave, baseada em dados ou híbrida)

Desvantagens da classe Robot

A estrutura do robô tem algumas desvantagens mencionadas abaixo:

  1. O evento de palavra-chave/mouse só funcionará na instância atual do Window. Por exemplo, suponha que um código esteja executando qualquer evento de classe de robô e, durante a execução do código, o usuário tenha movido para alguma outra tela, então um evento de palavra-chave/mouse ocorrerá nessa tela.
  2. A maioria dos métodos como mouseMove depende da resolução da tela, portanto, pode haver uma chance de que o código que funciona em uma máquina não funcione em outra.

Resumo

A classe Robot no pacote AWT é usada para gerar eventos de teclado/mouse para interagir com janelas do sistema operacional e aplicativos nativos.

O objetivo principal do Robot é dar suporte à construção de projetos de testes automatizados de selênio Java plataforma

Saiba Mais Leia mais