【问题标题】:Why do we need Robot class when we have Actions class in selenium当我们在 selenium 中有 Actions 类时,为什么我们需要 Robot 类
【发布时间】:2018-03-23 22:22:25
【问题描述】:

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

【问题讨论】:

  • Selenium 的Actions 没有与标准库绑定,需要浏览器驱动程序。 Robot 存在于标准库中,不需要浏览器驱动程序。
  • @VinceEmigh : tnks 得到了如此简短而完整的解释:)

标签: java selenium selenium-webdriver action awtrobot


【解决方案1】:

机器人类

Robot Class 定义在 java.awt 包中的 java.desktop 模块中。此类用于处理与 Test Automation 相关的本机系统输入事件,其中需要控制 Mouse 和 Keyboard。 Robot Class 的主要目的是促进 Java 平台实现的自动化测试。使用 Robot Class 生成输入事件不同于使用 Robot Class 将事件发布到 Java AWT 事件队列 或 AWT 组件 em> 事件在平台的本机输入队列中生成。例如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 模式,它可以构建一个 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();

【讨论】:

    【解决方案2】:

    主要区别在于 Actions 类使用鼠标和键盘进行模拟,而 Robot 类启用了实际的鼠标和键盘,因此您可以看到鼠标光标的移动。 更多详情请点击此链接 -> Robot class in Selenium

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-24
      • 1970-01-01
      • 2020-12-17
      • 2014-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-05
      相关资源
      最近更新 更多