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

使用JAVA获取WebElement在屏幕上的位置,java,selenium,position,awtrobot,Java,Selenium,Position,Awtrobot,One Liner-如何使用Java/Selenium获取Web元素的屏幕坐标 我在页面上有一个元素,它一直在随机位置浮动,我想使用Selenium单击文本框(可以使用findelelement(By.id(“btn”))。单击),但我想使用这里的Robot类,并使用其坐标移动到特定的WebElement 我面临的问题是,我无法动态获取WebElement在屏幕上的“”坐标,这使得我很难使用Robot类 我尝试过使用Point类 Point coordinates = driver.findEl

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

我在页面上有一个元素,它一直在随机位置浮动,我想使用Selenium单击文本框(可以使用findelelement(By.id(“btn”))。单击),但我想使用这里的Robot类,并使用其坐标移动到特定的WebElement

我面临的问题是,我无法动态获取WebElement在屏幕上的“”坐标,这使得我很难使用Robot类

我尝试过使用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);
下面是页面工作原理的一个片段,如果您想使用它,也可以下载

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']{
位置:绝对位置;
}

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

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

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

因此,解决问题的一种方法是进入全屏模式:
driver.manage().window().fullscreen()

然后在位置计算中使用一个恒定的y偏移量,可以通过反复试验找到。

为了引起更多的注意,我不想在这里使用任何反复试验的方法,我需要一些具体的方法