Java 使用Selenium web驱动程序获取元素的绝对位置
我正在使用Java中的Selenium web服务器,以便自动化许多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
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");