【问题标题】: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("//*")) 然后对于每个找到的元素检查它们的位置 xy 是否是您要匹配的位置,如果有的话返回元素。

或者按照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();
    

    【讨论】:

      猜你喜欢
      • 2018-09-01
      • 2012-12-12
      • 2019-02-04
      • 2017-09-12
      • 2021-03-31
      • 1970-01-01
      • 2015-01-18
      • 2020-05-19
      相关资源
      最近更新 更多