当前位置: 首页 > 面试题库 >

当硒中有Actions类时,为什么需要Robot类

杜高谊
2023-03-14
问题内容

我正在进行硒学习,当我探索与键盘和鼠标主题的交互时,我找到了这段代码。在Robot类的帮助下,执行Enter:

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

在动作类的帮助下,执行Enter:

Acthtml" target="_blank">ions action = new Actions(driver); 
action.sendKeys(Keys.ENTER).build().perform();

为什么我们需要两个班级执行相同的动作?Robot类和Actions类有什么区别?TIA。


问题答案:

机器人课

机器人类
java.desktop
模块的
java.awt
包中定义。此类用于处理与 Test Automation 相关的本机系统输入事件,需要控制 鼠标键盘
Robot Class 的主要目的是促进Java平台实现的 自动化测试 。使用 Robot Class 生成输入事件不同于将事件发布到
Java AWT事件队列AWT组件, 因为使用 Robot Class 事件是在平台的本机输入队列中生成的。举个例子
****
__Robot.mouseMove 实际上将移动鼠标光标,而不仅仅是生成 Mouse Move Event

在这一点上值得一提的是,某些平台需要特殊的特权或扩展才能访问低级输入控件。如果当前平台配置不允许输入控制,则在尝试构造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类是在
org.openqa.selenium.interactions 包中定义的,并且是 用户界面API ,用于在使用 Selenium 时模拟复杂的用户手势。虽然 测试自动化 通过
,你可以使用这个类,而不是直接使用键盘或鼠标。 Actions类 实现了 Builder模式 ,该 模式 可以构建一个
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();


 类似资料:
  • 问题内容: 我知道单例类是只能有一个实例化的类,但是我不明白为什么这样做会有用。为什么不只创建带有静态变量和方法的类,并在需要时使用sync来确保没有两个线程同时执行该类中的方法。我只是不明白为什么有人会遇到创建此类课程的麻烦。我知道我在这里想念什么。 谢谢, 问题答案: 当我同意其他答案时,OP询问为什么不使用具有所有静态方法的类(可能具有静态字段),而不是拥有一个实例的单例。 为什么使用单身人

  • 问题内容: 在较高的层次上,我知道我们需要通过使用它们各自的包装类在Java集合中使用它们来“包装”原始数据类型,例如int和char。我想了解Java集合如何在低级询问:“为什么我们需要将原始数据类型包装为对象才能在集合中使用它们?”在此先感谢您的帮助。 问题答案: 在虚拟机级别,这是因为与引用类型(例如java.lang.Object及其派生类型)相比,原始类型在内存中的表示方式非常不同。例如

  • 问题内容: 我可以将数据发送到服务器,但是只有在使用FromBody-Attribute时才可以。 为什么无法使用Post从主体自动读取json数据? 后端Web API 前端angularjs 问题答案: 仅因为某事是POST请求,所以没有明确的规则如何传递参数。POST请求仍可以包含URL中编码的查询参数。方法参数应该是“简单”类型(字符串,整数等)的查询参数。 通常,复杂类型应该是POST表

  • 问题内容: 我对JAX-WS进行了概述,并注意到了(和)的一些引用。 在什么情况下需要?(我认为JSR 109服务器?!) 问题答案: 是使用SUN的参考实现将Web服务作为标准存档部署在非Java EE5 Servlet容器上时所需的专有部署描述符。 Sun的RI 用作servlet上下文事件的侦听器和调度程序servlet。两者都必须在中声明。然后需要该文件为定义Web服务端点,以使其知道必须

  • 问题内容: 我们在Java中有包装器类,例如Interger,Float ..为什么它仍然仍然支持原语,这使Java成为完全面向对象的语言? 问题答案: 包装器是对象,被放置在堆中。基元只是“值”,并进入堆栈。这是更有效的,因为对于堆中的已包装基元,您(至少)需要值(位于堆栈中) 和 对包装器对象的引用。 这种性能提升是否重要根本取决于您在做什么。当然,对于繁重的数字工作而言,但对于其中99%的工