Selenium Webdriver 中的 Robot 类
Selenium 中的 Robot 类是什么?
Selenium 中的 Robot 类 用于实现 Java 平台的自动化测试。它在本地系统中生成输入事件,用于测试自动化、自运行演示以及需要用户控制鼠标和键盘的其他应用程序。Robot 类易于实现,并且可以轻松地与自动化框架集成。
为什么使用 Robot 类?
Selenium 中使用 Robot 类 是因为,在某些 Selenium 自动化测试中,用户需要控制键盘或鼠标来与操作系统窗口(如下载弹窗、打印弹窗等)和本地应用程序(如记事本、计算器等)进行交互。Selenium WebDriver 无法处理这些弹窗/应用程序,因此在 Java 1.3 版本中引入了 Robot 类,它可以处理操作系统弹窗/应用程序。
Robot 类文档
Selenium 中的 Robot 类文档 帮助用户理解 Java AWT 包中 Robot 类所有方法和函数的基本定义、语法和用法。用户可以在 Oracle 官方网站 上查看文档。用户也可以在本地机器上自行创建文档。
要在本地机器上创建文档,请按照以下步骤操作:
步骤 1) 您将在 JDK 文件夹中找到 src.zip 文件。复制 src.zip 并将其解压到其他文件夹或目录(例如 D: 或 E:)。
步骤 2) 解压 src 文件夹并导航到(src 文件夹的路径)/src/java/awt。
步骤 3) 复制 awt 文件夹的当前位置并打开命令提示符。
步骤 4) 在 cmd 中,将当前目录位置更改为 awt 文件夹,然后键入“javadoc *.java”,如下所示:
等待系统处理一会儿,完成后您将在 awt 文件夹中看到一些 HTML 文件。
步骤 5) 打开 index.html
步骤 6) 这里有 awt 包的完整文档,从左侧导航栏点击“Robot”超链接(参见下图中标注 1 的地方)。
在这里,您还可以看到 Robot 类的所有方法和接口(参见上图中标注 2 的地方)。
Selenium 中的 Robot 类方法和用法
Robot 类方法可用于在浏览器自动化过程中与键盘/鼠标事件进行交互。另外,可以使用 AutoIT,但它的缺点是会生成一个可执行文件(exe),该文件只能在 Windows 上运行,因此不是一个好的选择。
Web 自动化中 Robot 类的一些常用方法
方法 1: keyPress()
robot.keyPress(KeyEvent.VK_DOWN): 此方法将按下键盘的向下箭头键
方法 2: mousePress()
robot.mousePress(InputEvent.BUTTON3_DOWN_MASK): 此方法将按下鼠标右键。
方法 3: mouseMove()
robot.mouseMove(point.getX(), point.getY()): 这会将鼠标指针移动到指定的 X 和 Y 坐标。
方法 4: keyRelease()
robot.keyRelease(KeyEvent.VK_DOWN): 此方法将释放键盘的向下箭头键
方法 5: mouseRelease()
robot.mouseRelease(InputEvent.BUTTON3_DOWN_MASK): 此方法将释放鼠标右键
使用 Robot 类自动化常见用例的示例代码
- 我们以网站 http://spreadsheetpage.com/index.php/file/C35/P10/ 为例,在该网站中,当您点击一个网页元素(
.//a[@href=contains(text(),'yearly-calendar.xls']
)后,会弹出一个操作系统下载窗口。
- 为了处理这种情况,我们使用 Robot 类(在您的代码中创建一个 Robot 类实例,例如 Robot robot = new Robot())。Robot 类存在于 JDK 的 AWT 包中。
键盘按键 | 方法 |
---|---|
按下向下箭头键 | 我们使用 (robot.keyPress(KeyEvent.VK_DOWN)) |
按下 TAB 键 | 我们使用 (robot.keyPress(KeyEvent.VK_TAB)) |
按下 Enter 键 | 我们使用 (robot.keyPress(KeyEvent.VK_ENTER)) |
Selenium 中 Robot 类的示例
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 } }
观看此视频,了解其运行情况
如何使用 TestNG 执行 Robot 类代码
既然您已经了解了 Robot 类的基本方法,那么让我们来理解一些更复杂的方法——
假设您不想使用 click 方法 来点击网页元素。
在这种情况下,您可以使用 Robot 类的 mouseMove 方法。
步骤 1) mouseMove 方法将 x 和 y 坐标作为参数,例如 robot.mouseMove(630, 420),其中 630 表示 x 轴,420 表示 y 轴。因此,此方法会将鼠标指针从当前位置移动到指定的 x 和 y 交点。
步骤 2) 接下来,我们需要按下鼠标按钮。我们可以使用 mousePress 方法,例如 robot.mousePress(InputEvent.BUTTON1_DOWN_MASK)。
步骤 3) 按下后,鼠标需要释放。我们可以使用 robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK) 来释放鼠标左键。
使用 testNG 运行代码
使用 Testng 运行代码需要 TestNG 的 Maven 依赖项或 TestNG jar 文件的引用库。
TestNG Maven 依赖项
<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); // 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 } }
观看此视频,了解其运行情况
Robot 类的优点
- Robot 类可以模拟键盘和鼠标事件
- 在使用 Selenium WebDriver 时,Robot 类可以帮助上传/下载文件
- Robot 类可以轻松集成到当前的自动化框架中(关键字驱动、数据驱动或混合驱动)
Robot 类的缺点
Robot 框架有一些缺点,如下所述
- 键盘/鼠标事件仅在当前窗口实例上有效。例如,假设代码正在执行任何 Robot 类事件,并且在代码执行期间用户已移动到其他屏幕,那么键盘/鼠标事件将发生在该屏幕上。
- 大多数方法(如 mouseMove)都依赖于屏幕分辨率,因此一台机器上可以运行的代码可能无法在另一台机器上运行。
摘要
AWT 包中的 Robot 类用于生成键盘/鼠标事件,以与操作系统窗口和本地应用程序交互。
Robot 的主要目的是支持基于 Java 平台构建的 Selenium 自动化测试项目