【问题标题】:Find Element by Coordinates in Selenium (WebDriver)在 Selenium (WebDriver) 中按坐标查找元素
【发布时间】:2017-08-05 06:59:23
【问题描述】:
我知道如何在 Selenium 中检索 Web 元素的坐标:
WebElement element = driver.findElement(By.xpath(XPath));
Point location = element.getLocation();
location.x + " " + location.y
但是我试图做相反的事情 - 使用它的坐标定位一个 web 元素。
我知道我可以找到网页上的所有元素,循环遍历元素列表,获取列表中每个元素的 x,y 坐标并将其与预期坐标进行比较。如果一个元素的 x 和 y 坐标都与预期的 web 元素匹配,我可以返回给定的 web 元素。但是,对我来说,需要遍历页面上的每个 Web 元素以找到一个匹配元素似乎非常低效。
有没有更直接的通过坐标查找元素的方法?
注意: 虽然这里已经提出了类似的问题:Get element at specified position - JavaScript - 我的问题不同,因为我希望能够直接使用 Selenium 来执行此操作,而无需使用 Javscript。
【问题讨论】:
标签:
java
selenium
selenium-webdriver
webdriver
【解决方案1】:
唯一可能的方法是检查所有可能元素的坐标(如果您对要查找的元素一无所知,例如标签)
所以使用findElements 就像driver.findElements(By.cssSelector("*")) 或driver.findElements(By.xpath("//*")) 然后对于每个找到的元素检查它们的位置 x , y 是否是您要匹配的位置,如果有的话返回元素。
或者按照here 的描述通过驱动程序调用 js elementFromPoint :)
【解决方案2】:
使用 MoveToElement 您将能够找到或单击您想要的任何点,您只需定义第一个参数,它可以是实例 WindowsDriver 时创建的会话(winappdriver)或驱动程序(以其他方式) .否则,您可以将网格(我的情况)、列表、面板或任何您想要的设置为第一个参数。
注意:您的第一个参数元素的左上角将是位置 X = 0 和 Y = 0
Actions actions = new Actions(this.session);
int xPosition = this.session.FindElementsByAccessibilityId("GraphicView")[0].Size.Width - 530;
int yPosition = this.session.FindElementsByAccessibilityId("GraphicView")[0].Size.Height- 150;
actions.MoveToElement(this.xecuteClientSession.FindElementsByAccessibilityId("GraphicView")[0], xPosition, yPosition).ContextClick().Build().Perform();