왜 로봇 클래스인가?
특정 Selenium Automation Tests에서는 키보드 나 마우스를 제어하여 다운로드 팝업, 경고, 팝업 인쇄 등과 같은 OS 창 또는 메모장, Skype, 계산기 등과 같은 기본 운영 시스템 응용 프로그램과 상호 작용할 필요가 있습니다.
Selenium Webdriver는 이러한 OS 팝업 / 응용 프로그램을 처리 할 수 없습니다.
에서 자바 버전 1.3 로봇 클래스가 도입되었다. Robot Class는 OS 팝업 / 응용 프로그램을 처리 할 수 있습니다.
이 튜토리얼에서는,
로봇 클래스의 장점
- Robot Class는 키보드 및 마우스 이벤트를 시뮬레이션 할 수 있습니다.
- Robot 클래스는 Selenium 웹 드라이버를 사용할 때 파일 업로드 / 다운로드를 도울 수 있습니다.
- Robot Class는 현재 자동화 프레임 워크 (키워드, 데이터 기반 또는 하이브리드)와 쉽게 통합 될 수 있습니다.
로봇 클래스의 문서화
Robot Class 문서는 Robot Class에서 사용할 수있는 모든 메서드와 함수의 기본 정의, 구문 및 사용법을 이해하는 데 도움이됩니다. 당신의 설명서를 볼 수 있습니다 공식 오라클 웹 사이트 , 또는 당신은 당신의 로컬 컴퓨터에있는 문서를 만들 수 있습니다.
로컬 컴퓨터에서 설명서를 만들려면 아래 단계를 수행하십시오.
1 단계) JDK 폴더에 src.zip 파일이 있습니다. src.zip을 복사하고 다른 폴더 나 디렉토리에서 추출하십시오 (예 : D : 또는 E :).
2 단계) (path till src folder)/src/java/awt 로 가서 src folder 압축을 풀어라
3 단계) awt 폴더의 현재 위치를 복사하고 명령 프롬프트를 엽니 다.
4 단계) cmd에서 현재 디렉토리 위치를 awt 폴더로 변경하고 아래에 표시된대로 'javadoc * .java'를 입력하십시오.
시스템이 처리되기를 기다리십시오. 일단 완료되면 awt 폴더에 몇 개의 HTML 파일이 보입니다.
5 단계) index.html 열기
6 단계) 이제 awt 패키지의 전체 문서를 볼 수 있습니다. 왼쪽 네비게이션 바에서 '로봇'하이퍼 링크 (아래 그림 1 참조)를 클릭하십시오.
여기에서 로봇 클래스의 모든 메소드와 인터페이스를 볼 수 있습니다 (위의 이미지에 표시된 2 참조).
로봇 클래스의 내부 메소드와 사용법 이해하기
Robot Class 메서드는 브라우저 자동화를 수행하는 동안 키보드 / 마우스 이벤트와 상호 작용하는 데 사용할 수 있습니다. 또는 AutoIT 반입은 사용할 수 있지만 그 단점은 Windows에서만 작동합니다 실행 파일 (EXE)을 생성하는, 그래서 그것을 사용하는 것이 옵션이 아닙니다.
웹 자동화 중 일반적으로 사용되는 로봇 클래스의 몇 가지 방법 :
- keyPress () : 예 : robot.keyPress (KeyEvent.VK_DOWN) : 키보드의 아래쪽 화살표 키를 누른 상태에서이 메서드를 호출합니다.
- mousePress () : 예 : robot.mousePress (InputEvent.BUTTON3_DOWN_MASK) :이 메서드는 마우스 오른쪽 버튼을 누릅니다.
- mouseMove () : 예 : robot.mouseMove (point.getX (), point.getY ()) : 마우스 포인터를 지정된 X 및 Y 좌표로 이동합니다.
- keyRelease () : 예 : robot.keyRelease (KeyEvent.VK_DOWN) :이 메서드는 키보드의 아래쪽 화살표 키를 놓을 때 사용합니다.
- mouseRelease () : 예 : robot.mouseRelease (InputEvent.BUTTON3_DOWN_MASK) :이 메서드는 마우스의 오른쪽 클릭을 해제합니다
Robot 클래스를 사용하여 일반적인 사용 사례를 자동화하는 샘플 코드
- 웹 사이트 http://spreadsheetpage.com/index.php/file/C35/P10/의 예를 들어 봅시다 . 웹 요소 ( .//a[[href=contains(text(),'yearly- calendar.xls '] ) OS 다운로드 팝업이 나타납니다.
- 이를 처리하기 위해 우리는 Robot 클래스를 사용합니다 (코드에서 Robot 클래스의 인스턴스를 생성하면 Robot robot = new Robot () ). JDK의 AWT 패키지에 존재하는 Robot 클래스.
- 우리가 사용하는 키보드의 아래쪽 화살표 키를 누르기 위해 ( robot.keyPress (KeyEvent.VK_DOWN))
- 키보드의 Tab 키를 누르기 위해서 (우리는 robot.keyPress (KeyEvent.VK_TAB)를 사용 합니다)
- Enter 키를 누르기 위해 우리는 ( robot.keyPress (KeyEvent.VK_ENTER))를 사용합니다.
다음은 샘플 코드입니다.
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 클래스는 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);
// 위의 선택된 동작을 수행하기 위해 키보드의 Enter 키를 누릅니다.
}
}
실제 상황을 보려면이 비디오를 확인하십시오.
TestNG를 사용하여 로봇 클래스 코드를 실행하는 방법
이후 Robot 클래스의 기본 방법을 알고 있으므로 몇 가지 더 복잡한 메소드를 이해하자.
웹 요소에서 클릭하기 위해 click 메소드 를 사용 하지 않으려 한다고 가정 하십시오 .
이 경우 Robot 클래스의 mouseMove 메서드를 사용할 수 있습니다.
1 단계) mouseMove 메서드는 x 및 y 좌표를 robot.mouseMove (630, 420) 와 같은 매개 변수로 사용합니다. 여기서 630은 x 축을 나타내고 420은 y 축을 나타냅니다. 따라서이 메서드는 마우스 포인터를 현재 위치에서 언급 한 x 및 y 교차점으로 이동합니다.
2 단계) 다음으로 마우스 버튼을 눌러야합니다. robot.mousePress (InputEvent.BUTTON1_DOWN_MASK) 와 같은 메소드 mousePress를 사용할 수 있습니다 .
3 단계) 를 누른 후 마우스를 놓아야합니다. 우리는 마우스의 왼쪽 클릭을 해제하기 위해 robot.mouseRelease (InputEvent.BUTTON1_DOWN_MASK )를 사용할 수 있습니다 .
testNG를 사용하여 코드 실행 :
Testng을 사용하여 코드를 실행 하려면 testNG의 maven 종속성 또는 TestNG jar 파일의 참조 된 라이브러리가 필요합니다.
테스트 종속성 :
<dependency>
<groupId> org.testng </ groupId> <artifactId> testng </ artifactId> <version> 6.1.1 </ version> </ dependency>
maven 종속성 또는 jar 파일을 추가 한 후 testNG의 Test 주석을 가져와야합니다. 일단 모두 끝나면 프로그램 코드를 마우스 오른쪽 버튼으로 클릭하고 Run As를 클릭 한 다음 TestNG ...를 클릭하면 코드가 testNG API를 사용하여 실행을 시작합니다.
여기에 코드가있다.
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); // 특정 위치로 마우스 포인트 이동
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); // 키보드의 화살표 키를 눌러 라디오 저장 버튼을 선택하십시오.
Thread.sleep(2000);
robot.keyPress(KeyEvent.VK_ENTER);
// 위의 선택된 동작을 수행하기 위해 키보드의 Enter 키를 누릅니다.
}
}
실제 상황을 보려면이 비디오를 확인하십시오.
로봇 클래스의 단점
로봇 프레임 워크에는 다음과 같은 몇 가지 단점이 있습니다.
- 키워드 / 마우스 이벤트는 Window의 현재 인스턴스에서만 작동합니다. 예를 들어, 코드가 어떤 로봇 클래스 이벤트를 수행 중이며 코드 실행 중에 사용자가 다른 화면으로 이동했다면 그 화면에서 키워드 / 마우스 이벤트가 발생합니다.
- mouseMove와 같은 대부분의 메서드는 화면 해상도에 따라 다르므로 한 컴퓨터에서 작동하는 코드가 다른 컴퓨터에서 작동하지 않을 수도 있습니다.
개요
AWT 패키지의 Robot 클래스는 OS / 윈도우 및 기본 응용 프로그램과 상호 작용할 키보드 / 마우스 이벤트를 생성하는 데 사용됩니다.
로봇의 주 목적은 자바 플랫폼에서 셀레늄 자동 테스트 프로젝트 빌드를 지원하는 것입니다.
'자동화테스트 > Selenium' 카테고리의 다른 글
Selenium WebDriver의 원하는 기능 (0) | 2018.12.19 |
---|---|
Selenium과 함께 AutoIT 사용법 (0) | 2018.12.18 |
셀레니움 헤드리스 테스트를 위한 HTMLUnitDriver 및 PhantomJS (0) | 2018.12.16 |
Log4j with Selenium Tutorial (0) | 2018.12.15 |
Selenium에서의 병렬 실행 및 세션 처리 (0) | 2018.12.14 |