到目前为止,我已经使用Selenium Actions库来执行自动化项目中的鼠标/键盘操作。
最近,我发现了Java AWT Robot类。它与Selenium Actions库相比如何?它们中是否有一些边角案例需要解决?限制?稳定性?性能考虑?
到目前为止,我已经使用Selenium Actions库来执行自动化项目中的鼠标/键盘操作。
最近,我发现了Java AWT Robot类。它与Selenium Actions库相比如何?它们中是否有一些边角案例需要解决?限制?稳定性?性能考虑?
selenium
无法操纵的内容。但是,您可以让Firefox自动保存下载的文件类型和位置,而不显示弹窗。请参见在Firefox中访问文件下载对话框。机器人类定义在java.awt包中,属于java.desktop模块。该类用于处理与测试自动化相关的本地系统输入事件,需要控制鼠标和键盘。机器人类的主要目的是促进Java平台实现的自动化测试。使用机器人类生成输入事件与将事件发布到Java AWT事件队列或AWT组件不同,因为使用机器人类生成的事件会在平台的本地输入队列中生成。例如,Robot.mouseMove
实际上会移动鼠标光标,而不仅仅是生成鼠标移动事件。
此时值得一提的是,有些平台需要特殊权限或扩展来访问低级输入控制。如果当前平台配置不允许输入控制,则尝试构建机器人对象时将抛出 AWTException 异常。例如,X-Window 系统如果不支持(或未启用)XTEST 2.2 标准扩展,则会抛出该异常。
示例:
Robot robot = new Robot();
// Press keys using robot with a gap of of 500 mili seconds is added after every key press
robot.keyPress(KeyEvent.VK_S);
Thread.sleep(500);
robot.keyPress(KeyEvent.VK_T);
Thread.sleep(500);
robot.keyPress(KeyEvent.VK_A);
Thread.sleep(500);
robot.keyPress(KeyEvent.VK_S);
Thread.sleep(500);
robot.keyPress(KeyEvent.VK_I);
Actions 类 定义在 org.openqa.selenium.interactions 包中,是使用 Selenium 模拟复杂用户手势的 用户界面 API。Actions 类允许您构建一个基于 WebDriver API 的 操作链 并执行它们,遵循 W3C 规范。在通过 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();
我个人更喜欢使用Actions类来执行任何鼠标或键盘事件。 如果在某些环境中使用Actions类出现技术故障,则可以使用Robot类。