我正在开发自动化项目,使用Selenium webdriver和Java自动化Web应用程序测试。但是,我们因将鼠标指针移动到页面上所需的位置(x,y)而陷入困境。我们已经使用了Actions类来实现这一点,但是这个类不会将鼠标指针移动到位置,它只是移动鼠标的焦点,我们需要将鼠标悬停在元素上以打开工具提示。我们已经尝试使用其他框架SIKULI,它可以处理图像,它可以很好地工作但不会遍历页面上的每个元素/图像,它会选择与之匹配的随机图像。
然而,我们在网页上有图形,它有多个点,只有当鼠标在物理上悬停在元素上时才会打开工具提示。现在,我们遇到了新的想法,即获取页面上元素的位置(x,y)并使用Robot类在所需位置移动鼠标,但是当我们传递元素的(x,y)位置时页面,它将鼠标移动到屏幕上的其他位置,原因是机器人类将采用屏幕分辨率并根据(x,y)位置移动鼠标。
我们能否根据桌面屏幕大小实际找到确切的位置,例如网页大小为(3081,5172)并且基于网页元素位置为(723,415),现在屏幕尺寸时屏幕上元素的位置是什么是(1920,1080)?
Robot robot=new Robot();
Actions action = new Actions(driver);
action.moveToElement(ele).click().build().perform();
robot.mouseMove(ele.getLocation().getX(), ele.getLocation().getY());
注意:action.moveToElement方法不会将鼠标指针移动到所需元素上,而robot.mouseMove方法会在桌面屏幕上移动鼠标,这会导致输出错误。
您的意见将受到高度赞赏
答案 0 :(得分:0)
“你的陈述:我们已经尝试过使用其他框架SIKULI,它可以处理图像,它可以正常工作,但它不会到达页面上的每个元素/图像,它会选择与之匹配的随机图像。”
如果提供给sikuli以寻找目的的图像在给定的线性(0.7是默认值)下具有多个匹配,那么Sikuli可以点击哪个匹配是不可预测的。对于这种情况,您可以通过提供更高的匹配百分比来优化搜索:
pattern target = new Pattern ("img path/path").similar( (float) 0.85);
其他方法是使用findAll(..)命令返回所有匹配的匹配迭代器。然后你可以垂直或水平对它们进行排序(这非常棘手,需要更多编码)并使用它们。
sikuli的另一种方法是使用它:
Screen s = new Screen();
s.hover(new Location (int x-coordinate, int y-coordinate));