我正在经历 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 Class在 java.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 Class在 org.openqa.selenium.interactions 中定义包并且是面向用户的 API,用于在使用 Selenium 时模拟复杂的用户手势。通过 Selenium 进行测试自动化时,您可以使用此类,而不是直接使用键盘或鼠标。 Actions 类 实现了 Builder 模式,它可以构建一个 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();
关于java - 当我们在 selenium 中有 Actions 类时,为什么我们需要 Robot 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49459040/