Java 使用Selenium web驱动程序获取元素的绝对位置

Java 使用Selenium web驱动程序获取元素的绝对位置,java,javascript,dom,selenium-webdriver,Java,Javascript,Dom,Selenium Webdriver,我正在使用Java中的Selenium web服务器,以便自动化许多web页面 例如: WebDriver driver = new FirefoxDriver(); driver.get(url); WebElement element = driver.findElement(By.id("some_id")); 如何获得元素的绝对位置 在Javascript中,我可以获得DOM中任何元素的offsetTop和offsetLeft值: var element = document.g

我正在使用Java中的Selenium web服务器,以便自动化许多web页面

例如:

WebDriver driver = new FirefoxDriver();
driver.get(url);
WebElement element = driver.findElement(By.id("some_id"));
如何获得
元素的绝对位置

在Javascript中,我可以获得DOM中任何元素的
offsetTop
offsetLeft
值:

var element    = document.getElementById("some_id");
var offsetTop  = element.offsetTop;
var offsetLeft = element.offsetLeft;
因此,首先想到的是使用
JavascriptExecutor
调用上述脚本

但我想避免这种情况。是否有其他方法可以通过硒获得这些值


谢谢

您是否尝试过使用
WebElement
getLocation()
方法?似乎做了你需要的

以下是API文档:


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

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

driver = webdriver.Chrome()
driver.get(url)
element = driver.find_element_by_id('some_id')
offset_top = element.get_attribute('offsetTop')
由于两者都使用Selenium,因此在Java中,等价物为(未经测试):


对我尝试了
getLocation()
,但遇到了您描述的确切问题!它给出了元素的相对位置;我需要绝对位置。我不确定我们是否在谈论同一件事。通过相对,您的意思是它给您的结果与element.offsetTop和element.offsetLeft不同?如果问题是元素的位置取决于浏览器窗口的大小,那么它与设计有关……您是否尝试过与WebDriver.Window进行比较,并使用
getSize()
getPosition()
?也许用这些值进行一些计算可以得到您需要的…我需要元素的位置,在浏览器窗口中的绝对位置。当然,这可能与浏览器在屏幕上的位置有关,但这不是我主要关心的问题。给定一个显示在浏览器中的元素,我需要获取它在浏览器窗口中的绝对位置(顺便说一句,即使该元素位于
iframe
中)。我认为这不会有帮助。对于一些我知道不在任何东西左上角的元素(可能除了
div
iframe
或它们所在的任何其他元素),我得到(0,0)。回答不错,@ficsharve。参考
WebDriver driver = new FirefoxDriver();
driver.get(url);
WebElement element = driver.findElement(By.id("some_id"));
int offsetTop = element.getAttribute("offsetTop");