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: )
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
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
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).
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ô
- Robot Class pode simular evento de teclado e mouse
- Robot Class pode ajudar no upload/download de arquivos ao usar o driver web Selenium
- 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:
- 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.
- 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