robot class selenium webdriver with java
Este tutorial explica os usos, exemplos e funcionalidades da classe de robô em Java e sua integração com o Selenium Framework:
Robot Java é um Robô classe no Java Pacote AWT. Geralmente é usado para simular operações de teclado e mouse em tempo real que fazemos manualmente.
O objetivo principal da classe Robot em Java é a automação. A beleza disso é que pode ser facilmente integrado à estrutura de automação atual para aumentar seu alcance.
O que você aprenderá:
- Classe de robô em Java
- Conclusão
Classe de robô em Java
Neste tutorial, aprenderemos sobre a integração do Selenium com o Robot Class em Java, mas em geral, o Java Robot Class pode ser usado em qualquer estrutura de automação construída em Java.
Simulando funcionalidades da classe de robôs
Existem muitas funcionalidades da classe Robot em Java. Abaixo estão alguns métodos notáveis associados a eles:
# 1) Funcionalidades do teclado
As funcionalidades de teclado da classe Robot geralmente tratam da simulação de diferentes teclas disponíveis nos teclados e suas operações.
Public void keyPress (int keycode)
Esta função pressiona a tecla do parâmetro de entrada. Para completar a operação, o método de liberação da chave deve ser usado.
Siga o snippet de código abaixo:
r.keyPress(KeyEvent.VK_CONTROL); r.keyPress(KeyEvent.VK_V);
Aqui, no trecho de código acima, estamos apenas pressionando CTRL + V. O método KeyEvent está associado a outras teclas disponíveis em nosso teclado. Pode-se tentar todos eles.
Public void keyRelease (int keycode)
Este método libera a chave do parâmetro de entrada. Isso é pós-operação para o método de pressionamento de tecla.
Siga o snippet de código abaixo:
r.keyRelease(KeyEvent.VK_V); r.keyRelease(KeyEvent.VK_CONTROL);
Aqui no trecho de código acima, estamos apenas lançando CTRL + V. Da mesma forma como afirmado acima, o método KeyEvent também está associado a outras teclas disponíveis para o nosso teclado. Pode-se tentar todos eles.
# 2) Funcionalidades do mouse
As funcionalidades do mouse tratam de simular diferentes operações do mouse.
Public void mouseMove (int x, int y)
Aqui, os dois parâmetros determinam as coordenadas da tela. Depois de fornecer as coordenadas, o mouse se move para o ponto das coordenadas fornecidas na tela.
Siga o snippet de código fornecido:
robot.mouseMove (0, 900);
Aqui, a posição do parâmetro x é 0 e o parâmetro y é 900. Portanto, o mouse se moverá para esse ponto. Pode-se fazer um método de erro e tentativa para mover para as várias posições da tela.
Public void mousePress (botões int)
Pode-se imaginar essa funcionalidade com funcionalidades do keyPress para obter uma concepção clara. Este método simula as funções do mousePress.
Siga o snippet de código abaixo:
robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); //associated with mouse left click robot.mousePress(InputEvent.BUTTON2_DOWN_MASK); //associated with mouse middle click robot.mousePress(InputEvent.BUTTON3_DOWN_MASK); //associated with mouse right click
Public void mouseRelease (botões internos)
Pode-se imaginar essa funcionalidade com funcionalidades do keyPress para obter uma concepção clara. Este método simula as funções do mousePress.
Siga o snippet de código abaixo:
robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); //associated with mouse left click robot.mouseRelease(InputEvent.BUTTON2_DOWN_MASK); //associated with mouse middle click robot.mouseRelease(InputEvent.BUTTON3_DOWN_MASK); //associated with mouse right click
Observação :Existem vários outros métodos disponíveis para exploração. Mas os métodos acima são os usados com mais frequência. No entanto, para explorar outros métodos, pode-se pesquisar a classe Robot Java nos documentos Oracle.
Uso da classe de robô em Java
Quando e onde podemos usar a classe de robô em Java para aprimorar a funcionalidade efetivamente em uma estrutura de automação?
Como todos sabemos, o Selenium pode ser usado para automatizar aplicativos da web. Esses aplicativos da web no Selenium usam o objeto da web subjacente (localizadores) do aplicativo da web para determinar a posição na página da web e operar de acordo. Agora, em certos casos, vemos que precisamos lidar com o pop-up de autenticação do Windows ou qualquer outro pop-up de janela durante a automação do sistema operacional Windows.
O Selenium não pode automatizar as ações do Windows, mas podemos usar a classe Robot em Java para realizar a tarefa.
Exemplos de classe de robô Java
Exemplo 1: Usando a classe de robô para automatizar algumas funcionalidades do Windows
Às vezes, qualquer pequena parte / módulo de todo o aplicativo da web pode ser projetado em flash. Podemos usar a classe Robot para lidar com essa parte. Já os objetos da web permanecem ocultos para a peça projetada em flash.
como abrir arquivos .jnlp no Windows 10
Outro recurso importante que pode ser automatizado usando Robot Class em Java são os Rich Text Editors, que às vezes permanecem incorporados em aplicativos da web. Existem várias funções operacionais em editores RTF que são bastante fáceis de automatizar usando esta classe.
Exemplo 2: Usando a classe de robô para automatizar campos RTF
Observação :Existem outras ferramentas de código aberto disponíveis no mercado, como Auto TI (especialmente projetado para automatizar a GUI do Windows), Sikuli (ferramenta de processamento de imagem), etc. para realizar tarefas semelhantes.
Isso é verdade, mas o Robot Class em Java vem com JDK. Portanto, não precisamos de nenhuma outra ferramenta para instalar, esta é uma vantagem direta se alguém estiver usando uma estrutura de automação baseada em Java.
Automatizando campos RTF
Imagem de amostra:
Snippet de exemplo:
import java.awt.AWTException; import java.awt.Robot; import java.awt.Toolkit; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.StringSelection; import java.awt.event.KeyEvent; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class javainteraction { public void seleniumwithjava() throws AWTException, InterruptedException { System.setProperty('webdriver.chrome.driver', 'D://chromedriver//chromedriver.exe'); WebDriver driver =new ChromeDriver(); driver.get('https://www.tinymce.com' ); driver.manage().window().maximize(); driver.findElement(By.xpath('(//div(contains(@aria-label,'Bold'))//i(contains(@class,'mce-i-bold')))(1)')).click(); Robot r = new Robot(); String text = 'Welcome to the world of automation.'; StringSelection stringSelection = new StringSelection(text); Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); clipboard.setContents(stringSelection, stringSelection); r.keyPress(KeyEvent.VK_CONTROL); r.keyPress(KeyEvent.VK_V); r.keyRelease(KeyEvent.VK_V); r.keyRelease(KeyEvent.VK_CONTROL); Thread.sleep(1000); String text1 = 'Hope you enjoy This'; StringSelection stringSelection1 = new StringSelection(text1); Clipboard clipboard1 = Toolkit.getDefaultToolkit().getSystemClipboard(); clipboard1.setContents(stringSelection1, stringSelection1); r.keyPress(KeyEvent.VK_CONTROL); r.keyPress(KeyEvent.VK_V); r.keyRelease(KeyEvent.VK_V); r.keyRelease(KeyEvent.VK_CONTROL); driver.findElement(By.xpath('(//div(contains(@aria-label,'Italic'))//i(contains(@class,'mce-i-italic')))(1)')).click(); } public static void main(String args()) throws AWTException, InterruptedException { javainteraction j1 = new javainteraction(); j1.seleniumwithjava(); } }
Aqui, duas funcionalidades dos editores RTF foram automatizadas usando o ícone em negrito e itálico.
Automatizando algumas funcionalidades do Windows
import java.awt.AWTException; import java.awt.Robot; import java.awt.event.InputEvent; public class RobotJ { public static void main(String() args) { // TODO Auto-generated method stub Robot robot; try { robot = new Robot(); robot.mouseMove(0, 900); robot.delay(1000); robot.mousePress(InputEvent.BUTTON1_MASK); robot.mouseRelease(InputEvent.BUTTON1_MASK); robot.delay(1000); robot.mouseMove(300, 490); robot.mousePress(InputEvent.BUTTON3_DOWN_MASK); robot.mouseRelease(InputEvent.BUTTON3_DOWN_MASK); robot.delay(1000); robot.mouseMove(400, 690); robot.delay(1000); robot.mousePress(InputEvent.BUTTON1_MASK); robot.mouseRelease(InputEvent.BUTTON1_MASK); robot.delay(1000); robot.mouseMove(1300, 150); } catch (AWTException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
Este trecho de código geralmente lida com o início direto do ícone de início para visualizar a configuração do sistema. Usando um conceito semelhante, também é possível lidar com a geração de janelas pop-up durante o início ou entre a operação em uma página da web.
Dicas para incorporar o Robot Java na estrutura existente do Java + Selenium
Agora, veremos como modificar os códigos demonstrados acima para que possamos acomodá-los em uma estrutura Selenium + Java existente.
Observe que este é um conceito e há muitas outras maneiras de fazer o mesmo. Podemos estender / modificar ainda mais este conceito para atender às necessidades do negócio, que podem variar de projeto para projeto.
Primeiro, crie uma classe que conterá todos os métodos comuns ou da classe Robot disponibilizados para que, sempre que necessário, possamos utilizar esses métodos para qualquer outra classe onde estivermos escrevendo casos de teste.
Os trechos de código abaixo demonstram isso:
import java.awt.AWTException; import java.awt.Robot; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; public class CommonRobotMethods { Robot robot; int a= 0,b= 900; //This value can be exported from property file or excel sheet instead of direct input to the code public void LeftClickMouse() throws AWTException { robot = new Robot(); robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); } public void MiddleClickMouse() throws AWTException { robot = new Robot(); robot.mousePress(InputEvent.BUTTON2_DOWN_MASK); robot.mouseRelease(InputEvent.BUTTON2_DOWN_MASK); } public void RightClickMouse() throws AWTException { robot = new Robot(); robot.mousePress(InputEvent.BUTTON2_DOWN_MASK); robot.mouseRelease(InputEvent.BUTTON2_DOWN_MASK); } public void MouseMove(int x, int y) throws AWTException { robot = new Robot(); robot.mouseMove(x,y); } public void KeyPressCTRL() throws AWTException { robot = new Robot(); robot.keyPress(KeyEvent.VK_CONTROL); } public void KeyReleaseCTRL() throws AWTException { robot = new Robot(); robot.keyRelease(KeyEvent.VK_CONTROL); } public void KeyPressV() throws AWTException { robot = new Robot(); robot.keyPress(KeyEvent.VK_V); } public void KeyReleaseV() throws AWTException { robot = new Robot(); robot.keyRelease(KeyEvent.VK_V); } public String RobotJavaMethods(String utilityMethod) { switch(utilityMethod) { case 'LeftClickMouse': try { LeftClickMouse(); } catch(AWTException e) { //Write any thing to track the error } break; case 'MiddleClickMouse': try { MiddleClickMouse(); } catch(AWTException e) { //Write any thing to track the error } break; case 'RightClickMouse': try { RightClickMouse(); } catch(AWTException e) { //Write any thing to track the error } break; case 'MouseMove': try { MouseMove(a,b); } catch(AWTException e) { //Write any thing to track the error } break; case 'KeyPressCTRL': try { KeyPressCTRL(); } catch(AWTException e) { //Write any thing to track the error } break; case 'KeyReleaseCTRL': try { KeyReleaseCTRL(); } catch(AWTException e) { //Write any thing to track the error } break; case 'KeyPressV': try { KeyPressV(); } catch(AWTException e) { //Write any thing to track the error } break; case 'KeyReleaseV': try { KeyReleaseV(); } catch(AWTException e) { //Write any thing to track the error } break; default: System.out.println('UnHandled error'); } return utilityMethod; } }
Aqui nós pegamos alguns métodos, pode-se adicionar outros métodos de acordo com as necessidades do projeto.
Cada método é anexado a um caso de switch, de modo que a palavra-chave case possa ser usada quando e onde for necessário.
Agora vamos ver como podemos transformar o código que escrevemos para automatizar o editor RTF:
Consulte o snippet de código abaixo para entender que:
import java.awt.Robot; import java.awt.Toolkit; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.StringSelection; import java.awt.event.KeyEvent; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class seleniumFramework { public void actualOperationalMethod() throws InterruptedException { CommonRobotMethods cm = new CommonRobotMethods(); System.setProperty('webdriver.chrome.driver', UtilityPathandLoc.Chromedriver_path); WebDriver driver =new ChromeDriver(); driver.get(UtilityPathandLoc.APPURL); driver.manage().window().maximize(); driver.findElement(By.xpath(UtilityPathandLoc.Bold_loc)).click(); String text = UtilityPathandLoc.First_input; StringSelection stringSelection = new StringSelection(text); Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); clipboard.setContents(stringSelection, stringSelection); cm.RobotJavaMethods('KeyPressCTRL'); cm.RobotJavaMethods('KeyPressV'); cm.RobotJavaMethods('KeyReleaseV'); cm.RobotJavaMethods('KeyReleaseCTRL'); Thread.sleep(1000); String text1 = UtilityPathandLoc.Second_input; StringSelection stringSelection1 = new StringSelection(text1); Clipboard clipboard1 = Toolkit.getDefaultToolkit().getSystemClipboard(); clipboard1.setContents(stringSelection1, stringSelection1); cm.RobotJavaMethods('KeyPressCTRL'); cm.RobotJavaMethods('KeyPressV'); cm.RobotJavaMethods('KeyReleaseV'); cm.RobotJavaMethods('KeyReleaseCTRL'); driver.findElement(By.xpath(UtilityPathandLoc.Italics_loc)).click(); } public static void main(String args()) { seleniumFramework s1 = new seleniumFramework(); try { s1.actualOperationalMethod(); } catch (InterruptedException e) { e.printStackTrace(); } } }
Estamos criando o objeto da classe CommonRobotMethods dentro da classe seleniumFramework e acessando os métodos definidos na classe CommonRobotMethods via. Alterne as palavras-chave definidas na classe CommonRobotMethods.
Aqui, criamos uma interface para escrever todas as entradas que podem ser externalizadas. Mas pode-se dividir e escrever em excel / propriedades ou interface de acordo com seu nível de conforto ou necessidades de negócio.
public interface UtilityPathandLoc { String APPURL= 'https://www.tinymce.com'; String Chromedriver_path = 'D://chromedriver//chromedriver.exe'; String Bold_loc = '(//div(contains(@aria-label,'Bold'))//i(contains(@class,'mce-i-bold')))(1)'; String Italics_loc = '(//div(contains(@aria-label,'Italic'))//i(contains(@class,'mce-i-italic')))(1)'; String First_input = 'Welcome to the world of automation.'; String Second_input = 'Hope you enjoy This'; }
Conclusão
Felizmente, como utilizar o Robot Class dentro de uma estrutura Selenium + Java está claro agora. Desejamos que todos considerem este artigo interessante e útil para aprender o conceito.
Leitura recomendada
- Tutorial Cucumber Selenium: Cucumber Java Selenium WebDriver Integration
- Java Basics: Java Syntax, Java Class e Core Java Concepts
- Explore os fundamentos de Java no Selenium com exemplos
- Integração de Selenium com JMeter
- Tutorial da classe Java Scanner com exemplos
- Tutorial da classe Java Array - classe java.util.Arrays com exemplos
- O que é Java Vector | Tutorial da classe Java Vector com exemplos
- Interface Java e tutorial de classe abstrata com exemplos