【问题标题】:Get the absolute position of an element with Selenium web-driver使用 Selenium web-driver 获取元素的绝对位置
【发布时间】:2014-02-23 01:01:18
【问题描述】:

我在 Java 中使用 Selenium 网络服务器,以便自动化许多网页。

例如:

WebDriver driver = new FirefoxDriver();
driver.get(url);
WebElement element = driver.findElement(By.id("some_id"));

如何获取element的绝对位置?

在 Javascript 中,我可以获取 DOM 中任何元素的 offsetTopoffsetLeft 值:

var element    = document.getElementById("some_id");
var offsetTop  = element.offsetTop;
var offsetLeft = element.offsetLeft;

所以首先想到的是使用JavascriptExecutor 调用上述脚本。

但我想避免这种情况。有没有其他方法可以使用 Selenium 获取这些值?

谢谢

【问题讨论】:

    标签: java javascript dom selenium-webdriver


    【解决方案1】:

    您是否尝试过使用WebElementgetLocation() 方法?似乎可以满足您的需求...

    这是 API 文档:

    http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebElement.html

    但是,根据您网站的构建方式,元素位置可能取决于窗口的大小(检查style="position:fixed"),因此在尝试验证位置时要小心...

    【讨论】:

    • 是的!我试过getLocation(),但遇到了你描述的确切问题!它给出了元素的相对位置;我需要绝对位置。
    • 好吧,我不确定我们说的是不是同一件事。相对而言,您的意思是它给您的结果与 element.offsetTop 和 element.offsetLeft 不同?如果问题是元素的位置取决于浏览器窗口大小,则它与设计相关......
    • 您是否尝试过与 WebDriver.Window 进行比较并使用 getSize()getPosition()?也许使用这些值进行一些计算可以为您提供所需的...
    • 我需要元素的位置,绝对在浏览器窗口中。当然,它可能与浏览器在我的屏幕上的位置有关,但这不是我主要关心的问题。给定一个显示在浏览器中的元素,我需要获取它在浏览器窗口中的绝对位置(顺便说一下,如果这个元素在 iframe 内,甚至)。
    • 我认为这不会有帮助。对于一些我知道不位于任何左上角的元素,我得到 (0,0)(可能除了 diviframe 或它们所在的任何其他元素)。跨度>
    【解决方案2】:

    在 Python 中,这将获得 Web 元素的偏移顶部:

    driver = webdriver.Chrome()
    driver.get(url)
    element = driver.find_element_by_id('some_id')
    offset_top = element.get_attribute('offsetTop')
    

    由于两者都使用 Selenium,那么在 Java 中,等价物将是(未经测试):

    WebDriver driver = new FirefoxDriver();
    driver.get(url);
    WebElement element = driver.findElement(By.id("some_id"));
    int offsetTop = element.getAttribute("offsetTop");
    

    【讨论】:

    • 不错的答案,@ficoath。参考API
    猜你喜欢
    • 1970-01-01
    • 2015-07-14
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 2017-08-17
    • 1970-01-01
    • 1970-01-01
    • 2013-09-17
    相关资源
    最近更新 更多