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

问题描述 投票:1回答:1

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

java selenium selenium-webdriver action awtrobot
1个回答
3
投票

机器人类

Robot Classjava.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 Classorg.openqa.selenium.interactions包中定义,是用于使用Selenium时模拟复杂用户手势的User-Facing API。通过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();
© www.soinside.com 2019 - 2024. All rights reserved.