当我们在selenium中有Actions类时,为什么我们需要Robot类

时间:2018-03-23 22:22:25

标签: java selenium selenium-webdriver action awtrobot

我正在进行硒学习,当我探索与键盘和鼠标主题的交互时,我发现了这段代码。 在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。

2 个答案:

答案 0 :(得分:3)

机器人类

Robot Classjava.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 Classorg.openqa.selenium.interactions包中定义,是用户面向API ,用于在使用 Selenium 时模拟复杂的用户手势。通过 Selenium 测试自动化时,您可以使用此类而不是直接使用键盘或鼠标。 Actions类实现 Builder Pattern ,它可以构建一个 CompositeAction ,其中包含下面提到的方法调用指定的所有操作:

一个例子:

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