按Selenium中的坐标查找元素(WebDriver)

时间:2017-03-14 19:04:58

标签: java selenium selenium-webdriver webdriver

我知道如何在Selenium中检索网页元素的坐标:

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。

2 个答案:

答案 0 :(得分:0)

唯一可行的方法是检查所有可能元素的坐标(如果你对你要找的元素一无所知,例如标签)

因此,使用 TriFunction<Test, Integer, Integer, Test> f = Test::copy; TriFunction<Test, Integer, Integer, Test> f2 = (test, i, j) -> test.copy(i, j); findElements之类的driver.findElements(By.cssSelector("*")),然后为每个找到的元素检查他们的位置driver.findElements(By.xpath("//*"))x是否是您正在尝试的位置匹配并返回元素(如果有的话)。

或者按照here描述的那样通过驱动程序调用js y:)

答案 1 :(得分:0)

使用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();