当我们在 selenium 中有 Actions 类时,为什么还需要 Robot 类
问题:当我们在 selenium 中有 Actions 类时,为什么还需要 Robot 类
我正在学习硒,当我在探索与键盘和鼠标的交互主题时,我发现了这段代码。在 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。
解答
机器人类
机器人类定义在java.awt包中java.desktop模块中。此类用于处理与_Test Automation_ 相关的本机系统输入事件,其中需要控制_Mouse_ 和_Keyboard_。 Robot Class 的主要目的是促进Java 平台实现的_Automated Testing_。使用_Robot Class_ 生成输入事件不同于将事件发布到_Java AWT 事件队列_ 或_AWT 组件_,因为使用_Robot Class_ 事件是在平台的本机输入队列中生成的。例如,Robot.mouseMove将实际移动鼠标光标,而不仅仅是生成_Mouse Move Event_。
此时值得一提的是,某些平台需要特殊权限或扩展才能访问低级输入控件。如果当前平台配置不允许输入控制,尝试构造 Robot 对象时会抛出AWTException。例如,如果_X server_ 不支持(或未启用)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);
动作类
Actions 类在org.openqa.selenium.interactions包中定义,是 User-Facing API 用于在使用 Selenium 时模拟复杂的用户手势。而 Test Automation 通过 Selenium 你可以使用这个类而不是直接使用键盘或鼠标。 Actions Class 实现了 Builder Pattern ,它可以构建一个 CompositeAction 包含由下面提到的方法调用指定的所有操作:
-
build() -
click(WebElement target) -
clickAndHold(WebElement target) -
contextClick(WebElement target) -
doubleClick(WebElement target) -
dragAndDrop(WebElement source, WebElement target) -
moveToElement(WebElement target, int xOffset, int yOffset) -
perform() -
sendKeys(WebElement target, java.lang.CharSequence... keys)
一个例子 :
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();
更多推荐

所有评论(0)