使用JAVA获取WebElement在屏幕上的位置

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

One Liner-如何使用Java / Selenium获取WebElement的屏幕坐标

我在页面上有一个元素,该元素一直在随机位置浮动,我想使用Selenium单击文本框(使用findElement(By.id(“ btn”))。click可以实现),但是我想在此处使用机器人类,并使用其坐标移动到特定的WebElement。

我面临的问题是我无法动态获取WebElement的“ 屏幕上”坐标,这使我更难使用机器人类

我尝试使用Point类

Point coordinates = driver.findElement(By.id("btn")).getLocation();
int x = coordinates.getX();
int y = coordinates.getY();

但是如果我使用以下方法在Robot类中使用这些值,则指针将移动到比给定坐标稍远的位置,这似乎是因为当前坐标在浏览器级别,而mouseMove方法在在屏幕级别

Robot robot = new Robot();
robot.mouseMove(x, y);
robot.mousePress(InputEvent.BUTTON1_MASK);

下面是页面工作原理的摘要,如果您想使用它,也可以下载HTML file

var btn = document.getElementById("btn");
btn.style.top = Math.floor((Math.random() * 230) + 1) + "px";
btn.style.left = Math.floor((Math.random() * 200) + 1) + "px";
input[type='text'] {
       position: absolute;
  }
<input placeholder="Click Here to Type Something" type="text" id="btn" name="fname">
java selenium position awtrobot
1个回答
0
投票

正如您所指出的,问题的根源是getLocation()方法返回相对于页面左上角的值,但是您不知道它在屏幕坐标中的位置。

如果您的浏览器已最大化,那么问题就更简单了,因为您知道浏览器顶部在屏幕上的位置。在全屏模式下,事情变得更加简单,因为浏览器选项卡和地址栏不受影响。

[在Chrome中,在自动测试中,顶部,页面和屏幕之间唯一的区别是“ Chrome由自动测试软件控制。”警告栏。

因此,解决此问题的一种方法是进入全屏模式:driver.manage().window().fullscreen();然后在位置计算中使用常数y偏移,您可以通过反复试验找到它。

© www.soinside.com 2019 - 2024. All rights reserved.