selenium - 如何使用 selenium Web 驱动程序移动可见的鼠标指针?
问题描述
我是 Selenium 的新手。我正在使用gridlastic作为测试环境。
我已经完成了 selenium 的 Actions 类,它具有移动鼠标的方法,以及通过调用 getMouse() 通过 Web 驱动程序获取鼠标实例并尝试移动鼠标但成功。
@Test(enabled = true)
public void test_site() throws Exception {
Coordinates elementLocation = null;
driver.get("https://www.amazon.com");
Mouse mouse = ((HasInputDevices) driver).getMouse();
System.out.println(mouse.toString());
if(mouse==null) {
System.out.println("mouse is null");
}
WebElement element1=driver.findElementByXPath("//*[@id=\"a-autoid-0-announce\"]");
elementLocation = ((Locatable) element1).getCoordinates();
mouse.mouseMove(elementLocation);
Thread.sleep(5000); //slow down for demo purposes
}
也尝试使用动作类
@Test(enabled = true)
public void test_site() throws Exception {
driver.get("https://www.google.com/ncr");
Actions builder = new Actions(driver);
builder.
moveByOffset( 100, 1 )
.build().perform();
Thread.sleep(10000); //slow down for demo purposes
WebElement element = driver.findElement(By.name("q"));
element.sendKeys("webdriver");
element.submit();
Thread.sleep(5000); //slow down for demo purposes
}
仍然成功,鼠标指针始终保持在位置 (0,0)。任何人都可以帮助如何做到这一点。
请不要建议使用来自 JAVA 的 Robot Class,因为测试环境是 gridlastic 并且它不适合它。
我也尝试使用 javascript 执行器,但它不可能,因为鼠标光标是由操作系统控制的。我想改变窗口对象 clientX 和 clientY 的值,但根据文档,这些是只读的。
解决方案
这看起来很奇怪,但如果你尝试下面的代码,你会看到,你没有看到移动的鼠标指针:
PointerInput p = new PointerInput(PointerInput.Kind.MOUSE, "MyMouse");
Interaction i = p.createPointerMove(Duration.ofSeconds(2), PointerInput.Origin.fromElement(element1), 5, 5);
Actions builder = new Actions(driver);
Action mouseOverHome = builder
.tick(i).click()
.build();
mouseOverHome.perform();
我添加了点击演示效果。我不得不与购物车一起工作//*[@id=\"nav-cart\"]
。你的 xpath 表达式对我来说是不可见的。在单击之前,您会注意到购物车图标的鼠标悬停效果。
推荐阅读
- c++ - qml 未知方法返回类型:ArchiveFile*,即使调用了 qmlRegisterUncreatableType
- jquery - 如何使用 jquery 访问父父文本?
- html - 当我尝试检查 request.method == 'POST' 时,为什么我的 Flask 代码出错?
- sql - 来自两个子查询的值的比率为零
- python - 用于量化感知训练的 TF Lite 的 Toco 转换器参数说明
- java - 将 struts-html.tld 添加到 jsp 文件时发生错误
- python - 二元分类、熵不匹配、无效参数(收到的标签值 1 超出 [0, 1) 的有效范围)
- scala - 对象scala泛型中的隐式类函数
- javascript - 将带有字母和数字的字符串解析为整数时出现问题
- android - 使用 AsyncTask 从 Android 调用 java Web 服务(两个数字相加)的示例