我正在经历硒学习,当我探索与键盘和鼠标主题的交互时,我发现了这段代码。在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包中定义。此类用于处理与Test Automation关联的本机系统输入事件,其中需要控制鼠标和键盘。 Robot Class的主要目的是促进Java平台实现的自动化测试。使用Robot Class生成输入事件不同于将事件发布到Java AWT事件队列或AWT组件,因为在平台的本机输入队列中使用Robot类事件生成。举个例子,Robot.mouseMove
实际上会移动鼠标光标,而不仅仅是生成鼠标移动事件。
此时值得一提的是,某些平台需要特殊权限或扩展才能访问低级输入控件。如果当前平台配置不允许输入控制,则在尝试构造Robot对象时将抛出AWTException。例如,如果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);
Actions Class在org.openqa.selenium.interactions包中定义,是用于使用Selenium时模拟复杂用户手势的User-Facing API。通过Selenium测试自动化时,您可以使用此类而不是直接使用键盘或鼠标。 Actions类实现了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();