java - 当我们在 selenium 中有 Actions 类时,为什么我们需要 Robot 类

标签 java selenium selenium-webdriver action awtrobot

我正在经历 selenium 学习,当我探索与键盘和鼠标主题的交互时,我找到了这段代码。 在 Robot 类的帮助下,执行 Enter :

Robot r=new Robot();
r.keyPress(KeyEvent.VK_ENTER);

借助 Actions 类,执行 Enter :

Actions action = new Actions(driver); 
action.sendKeys(Keys.ENTER).build().perform();

为什么我们需要两个类执行相同的操作? Robot 类和 Actions 类有什么区别? TIA。

最佳答案

机器人类

Robot Classjava.awt 中定义包内java.desktop模块。此类用于处理与测试自动化 相关的 native 系统输入事件,其中需要控制鼠标键盘Robot Class 的主要目的是促进 Java 平台实现的自动化测试。使用 Robot Class 生成输入事件不同于将事件发布到 Java AWT 事件队列AWT 组件,因为使用 Robot Class 事件在平台的 native 输入队列中生成。例如,Robot.mouseMove 将实际移动鼠标光标,而不是仅仅生成鼠标移动事件

此时值得一提的是,某些平台需要特殊权限或扩展才能访问低级输入控件。如果当前平台配置不允许输入控制,一个 AWTException将在尝试构建 Robot 对象时抛出。例如,如果 X 服务器 不支持(或未启用)XTEST 2.2 标准扩展X-Window 系统 将抛出异常.

一个例子:

Robot robot = new Robot();
// Press keys using robot. A gap of of 500 mili seconds is added after every key press
robot.keyPress(KeyEvent.VK_R);
Thread.sleep(500);
robot.keyPress(KeyEvent.VK_U);
Thread.sleep(500);
robot.keyPress(KeyEvent.VK_P);
Thread.sleep(500);
robot.keyPress(KeyEvent.VK_A);
Thread.sleep(500);
robot.keyPress(KeyEvent.VK_L);
Thread.sleep(500);
robot.keyPress(KeyEvent.VK_I);

Action 类

Actions Classorg.openqa.selenium.interactions 中定义包并且是面向用户的 API,用于在使用 Selenium 时模拟复杂的用户手势。通过 Selenium 进行测试自动化时,您可以使用此类,而不是直接使用键盘或鼠标。 Actions 类 实现了 Builder 模式,它可以构建一个 CompositeAction 包含由下面提到的方法调用指定的所有操作:

一个例子:

Actions act = new Actions(driver);
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement electronics = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//li/a[@href='/electronics']")));
act.moveToElement(electronics).perform();

关于java - 当我们在 selenium 中有 Actions 类时,为什么我们需要 Robot 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49459040/

相关文章:

java - org.eclipse.jetty.websocket.jsr356.server.ServerContainer 无法转换为 org.apache.tom cat.websocket.server.WsServerContaine

java - 将 JFreeChart TimeSeries 限制为工作时间

java - 使用 JAVA 在 selenium 中执行测试的屏幕录制

java - 浏览器关闭时关闭程序

selenium - 无法使用 Selenium 将日期放入 Firefox 中的 <input type ="date"> 字段

Java 防止出于相同目的的方法重复 - 不同的参数

JDBC 结果上的 Java 并发

testing - Selenium 是一个很好用的测试软件吗?

java - 如何让 Selenium WebDriver 等待 HTML5 视频(jwplayer)完成?

selenium - 以下场景如何使用子元素点击父元素