robot class selenium webdriver with java
이 튜토리얼은 Java에서 로봇 클래스의 사용, 예제 및 기능과 Selenium 프레임 워크와의 통합을 설명합니다.
로봇 자바는 로봇 클래스 자바 AWT 패키지. 일반적으로 수동으로 수행하는 실시간 키보드 및 마우스 작업을 시뮬레이션하는 데 사용됩니다.
Java에서 Robot Class의 주요 목적은 자동화입니다. 그것의 장점은 현재 자동화 프레임 워크와 쉽게 통합되어 범위를 확장 할 수 있다는 것입니다.
학습 내용 :
자바의 로봇 클래스
이 튜토리얼에서는 Java의 Robot Class와 Selenium 통합에 대해 배우지 만 일반적으로 Java Robot Class는 Java에 구축 된 모든 자동화 프레임 워크에서 사용할 수 있습니다.
로봇 클래스의 기능 시뮬레이션
Java에는 Robot Class의 많은 기능이 있으며, 그와 관련된 몇 가지 주목할만한 메소드가 아래에 나열되어 있습니다.
# 1) 키보드 기능
Robot 클래스의 키보드 기능은 일반적으로 키보드에서 사용 가능한 다양한 키의 시뮬레이션과 해당 작업을 다룹니다.
Public void keyPress (int keycode)
이 기능은 입력 매개 변수 키를 누릅니다. 작업을 완료하려면 키 해제 방법을 사용해야합니다.
아래 코드 스 니펫을 따르십시오.
r.keyPress(KeyEvent.VK_CONTROL); r.keyPress(KeyEvent.VK_V);
위의 코드 스 니펫에서 CTRL + V를 누르면됩니다. KeyEvent 메서드는 키보드에서 사용할 수있는 다른 키와 연결되어 있습니다. 모두 시도해 볼 수 있습니다.
Public void keyRelease (int keycode)
이 메소드는 입력 매개 변수 키를 해제합니다. 이것은 키 누르기 방법에 대한 사후 작업입니다.
아래 코드 스 니펫을 따르십시오.
r.keyRelease(KeyEvent.VK_V); r.keyRelease(KeyEvent.VK_CONTROL);
위의 코드 스 니펫에서 CTRL + V를 놓았습니다. 위에서 언급했듯이 KeyEvent 메서드는 키보드에서 사용할 수있는 다른 키와도 연결됩니다. 모두 시도해 볼 수 있습니다.
# 2) 마우스 기능
마우스 기능은 마우스의 다른 작동을 시뮬레이션하는 것을 다룹니다.
Public void mouseMove (int x, int y)
여기서 두 매개 변수는 화면의 좌표를 결정합니다. 좌표를 제공하면 마우스가 화면의 주어진 좌표 지점으로 이동합니다.
주어진 코드 스 니펫을 따르십시오.
robot.mouseMove (0, 900);
여기에서 x 매개 변수의 위치는 0이고 y 매개 변수는 900입니다. 따라서 마우스가 그 지점으로 이동합니다. 화면의 다양한 위치로 이동하기 위해 오류 및 시도 방법을 할 수 있습니다.
Public void mousePress (int buttons)
명확한 개념을 얻기 위해 keyPress 기능으로이 기능을 상상할 수 있습니다. 이 메서드는 mousePress 함수를 시뮬레이션합니다.
아래 코드 스 니펫을 따르십시오.
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 (int buttons)
명확한 개념을 얻기 위해 keyPress 기능으로이 기능을 상상할 수 있습니다. 이 메서드는 mousePress 함수를 시뮬레이션합니다.
아래 코드 스 니펫을 따르십시오.
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
노트 :탐색에 사용할 수있는 몇 가지 다른 방법이 있습니다. 그러나 위의 방법이 가장 많이 사용됩니다. 그러나 다른 방법을 탐색하려면 Oracle 문서에서 Robot Java 클래스를 검색 할 수 있습니다.
자바에서 로봇 클래스 사용
자동화 프레임 워크에서 기능을 효과적으로 향상시키기 위해 Java의 Robot Class를 언제 어디서 사용할 수 있습니까?
우리 모두 알고 있듯이 Selenium을 사용하여 웹 애플리케이션을 자동화 할 수 있습니다. Selenium의 이러한 웹 애플리케이션은 웹 애플리케이션의 기본 웹 객체 (로케이터)를 사용하여 웹 페이지에서의 위치를 결정하고 그에 따라 작동합니다. 이제 특정 경우에 우리는 Windows 운영 체제에서 자동화하는 동안 Windows 인증 팝업 또는 다른 모든 창 팝업을 처리해야한다는 것을 알았습니다.
Selenium은 Windows 작업을 자동화 할 수 없지만 Java의 Robot Class를 사용하여 작업을 수행 할 수 있습니다.
자바 로봇 클래스 예
예 1 : 로봇 클래스를 사용하여 일부 Windows 기능 자동화
때로는 전체 웹 애플리케이션의 작은 부분 / 모듈이 플래시로 디자인 될 수 있습니다. 로봇 클래스를 사용하여 해당 부분을 처리 할 수 있습니다. 웹 객체는 플래시로 설계된 부품에 대해 숨겨져 있기 때문입니다.
Windows 7 64 비트를위한 최고의 방화벽
Java에서 Robot Class를 사용하여 자동화 할 수있는 또 다른 중요한 기능은 리치 텍스트 편집기로, 때때로 웹 애플리케이션에 포함되어 있습니다. RTF 편집기에는이 클래스를 사용하여 자동화하기 매우 쉬운 몇 가지 작동 기능이 있습니다.
예 2 : RTF 필드 자동화를 위해 로봇 클래스 사용
노트 :시장에서 사용할 수있는 다른 오픈 소스 도구가 있습니다. 자동차 IT (특히 Windows GUI를 자동화하도록 설계됨), Sikuli (이미지 처리 도구) 등이 유사한 작업을 수행합니다.
이것은 사실이지만 Java의 Robot Class는 JDK와 함께 제공됩니다. 따라서 설치하는 데 다른 도구가 필요하지 않습니다. 이는 Java 기반 자동화 프레임 워크를 사용하는 경우 직접적인 이점입니다.
RTF 필드 자동화
샘플 사진 :
스 니펫 예 :
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(); } }
여기에서 RTF 편집기의 두 가지 기능은 굵은 기울임 꼴 아이콘을 사용하여 자동화되었습니다.
일부 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(); } } }
이 코드 조각은 일반적으로 시작 아이콘에서 시스템 구성보기까지 바로 처리합니다. 유사한 개념을 사용하면 웹 페이지에서 작업을 시작하거나 작업 사이에 생성되는 창 팝업을 처리 할 수도 있습니다.
로봇 Java를 기존 Java + Selenium 프레임 워크에 통합하기위한 팁
이제 기존 Selenium + Java 프레임 워크에 동일한 코드를 수용 할 수 있도록 위에서 설명한 코드를 수정하는 방법을 살펴 보겠습니다.
이것은 개념이며 동일한 작업을 수행하는 다른 많은 방법이 있습니다. 프로젝트마다 다를 수있는 비즈니스 요구 사항을 충족하기 위해이 개념을 추가로 확장 / 수정할 수 있습니다.
먼저, 모든 공통 또는 로봇 클래스 사용 가능한 메서드를 보유 할 클래스를 생성하여 필요할 때마다 테스트 케이스를 작성하는 다른 클래스에 해당 메서드를 활용할 수 있도록합니다.
아래 코드 스 니펫은이를 보여줍니다.
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; } }
여기서 우리는 몇 가지 방법을 취했으며 프로젝트 요구에 따라 다른 방법을 유사하게 추가 할 수 있습니다.
각 방법은 하나의 스위치 케이스에 첨부되어있어 필요할 때 언제 어디서나 case 키워드를 사용할 수 있습니다.
이제 RTF 편집기를 자동화하기 위해 작성한 코드를 변환하는 방법을 살펴 보겠습니다.
이해하려면 아래 코드 스 니펫을 참조하세요.
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(); } } }
우리는 seleniumFramework 클래스 내부에 CommonRobotMethods 클래스의 개체를 만들고 CommonRobotMethods 클래스에 정의 된 메서드에 액세스합니다. CommonRobotMethods 클래스에 정의 된 키워드를 전환합니다.
여기에서 외부화 할 수있는 모든 입력을 기록하는 인터페이스를 만들었습니다. 그러나 편안함 수준이나 비즈니스 요구 사항에 따라 엑셀 / 속성 또는 인터페이스로 나누고 쓸 수 있습니다.
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'; }
결론
바라건대, Selenium + Java 프레임 워크 내에서 로봇 클래스를 활용하는 방법이 이제 명확 해졌습니다. 모두가이 기사가 개념을 배우는 데 흥미롭고 도움이 되었으면합니다.