簡體   English   中英

使用 JAVA 獲取 WebElement 的屏幕位置

[英]Get the On Screen location of WebElement using JAVA

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

我在頁面上有一個元素在隨機位置浮動,我想使用 Selenium 單擊文本框(這可以使用 findElement(By.id("btn")).click 來實現),但我想在此處使用機器人 Class 並使用其坐標移動到特定的 WebElement。

我面臨的問題是我無法動態獲取 WebElement 的“屏幕上”坐標,這使我更難使用機器人 Class

我試過使用點 class

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

但是,如果我使用以下方法在機器人 class 中使用這些值,則指針將移動到比給定坐標稍遠的位置,這似乎是因為當前坐標位於瀏覽器級別,而 mouseMove 方法位於屏幕上等級

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

下面是頁面工作原理的片段,如果您想玩它,還可以下載HTML 文件

 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">

正如您所指出的,問題的根源在於getLocation()方法返回一個相對於頁面左上角的值,但您不知道它在屏幕坐標中的位置。

如果您的瀏覽器已最大化,那么問題會稍微簡單一些,因為您知道瀏覽器頂部在屏幕上的哪個位置。 在全屏模式下,由於瀏覽器選項卡和地址欄不礙事,事情變得更加簡單。

在 Chrome 中,在自動化測試中,頂部與頁面和屏幕之間唯一的內容是“Chrome 正在被自動化測試軟件控制”。 警告欄。

所以解決問題的一種方法是進入全屏模式: driver.manage().window().fullscreen(); 然后在位置計算中使用常量 y 偏移量,您可以通過反復試驗找到該偏移量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM