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

Why do we need Robot class when we have Actions class in selenium

我正在学习selenium,在探索与键盘和鼠标交互主题时,我找到了这段代码。 在机器人 class 的帮助下,执行 Enter :

Robot r=new Robot();
r.keyPress(KeyEvent.VK_ENTER);

借助操作 class,执行输入:

Actions action = new Actions(driver); 
action.sendKeys(Keys.ENTER).build().perform();

为什么我们需要 class 来执行相同的操作? Robot class 和 Actions class 有什么区别? TIA.

机器人Class

Robot Class is defined in java.awt package within java.desktop 模块。此 class 用于处理与 Test Automation 相关的本机系统输入事件,其中控制 Mouse 和 [=48=需要]键盘。 Robot Class 的主要目的是促进 自动化测试 Java 平台实施。使用 机器人 Class 生成输入事件不同于将事件发布到 Java AWT 事件队列 AWT 组件 as using Robot Class 事件在平台的本机输入队列中生成。例如 Robot.mouseMove 将实际移动鼠标光标而不是仅仅生成 鼠标移动事件.

此时值得一提的是,某些平台需要特殊权限或扩展才能访问 low-level 输入控件。如果当前平台配置不允许输入控制,则在尝试构造 Robot 对象时将抛出 AWTException。例如,如果 X-Window systems 不支持(或未启用)XTEST 2.2 标准扩展 ,则会抛出异常=48=]X服务器.

一个例子:

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);

操作数 Class

Actions Class is defined in org.openqa.selenium.interactions 包并且是 User-Facing API 用于在使用 Selenium[=92 时模拟复杂的用户手势=].虽然 Test Automation 通过 Selenium 您可以使用这个 class 而不是直接使用键盘或鼠标。 Actions Class 实现了 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();

主要区别在于操作 class 模拟鼠标和键盘,而机器人 class 启用实际的鼠标和键盘,因此您可以看到鼠标光标的移动。 更多详情请点此Link -> Robot class in Selenium