我正在进行硒学习,当我探索与键盘和鼠标主题的交互时,我发现了这段代码。 在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。
答案 0 :(得分:3)
Robot Class在java.awt模块中的java.desktop包中定义。此类用于处理与 Test Automation 关联的本机系统输入事件,其中需要控制鼠标和键盘。 Robot Class 的主要目的是促进Java平台实现的自动化测试。使用 Robot Class 生成输入事件不同于将事件发布到 Java AWT事件队列或 AWT组件,如使用 Robot Class 事件在平台的本机输入队列中生成。例如,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包中定义,是用户面向API ,用于在使用 Selenium 时模拟复杂的用户手势。通过 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();
答案 1 :(得分:1)
主要区别是Actions类使用鼠标和键盘模拟,而Robot类则启用实际的鼠标和键盘,因此您可以看到鼠标光标的移动。 有关更多详细信息,请单击此链接-> Robot class in Selenium