尝试将元素滚动到视口的中心

Attempt to scroll an element to the centre of the viewport

我正在使用 watir-webdriver gem,最近在尝试单击 firefox 上的某些元素时遇到了问题。

尝试单击视口外的元素时,页面会滚动并将该元素放在页面顶部。这基本上只是:

require 'watir-scroll'
element = @browser.div({:id=>'potatoes'})
element.wait_until_present
@browser.scroll.to(element)
element.click

$("div[id='potatoes']").scrollIntoView();

然而,这给我带来了一些问题,因为我在页面顶部有一个覆盖横幅 运行,这反过来又导致元素成为 "behind"。有没有一种简单的方法可以尝试滚动到某个元素,而不是将其放在视口顶部,而是尝试将其居中。

另外我用过:

$("div[id='potatoes']").scrollIntoView(false);

滚动到该元素并将其放置在页面底部,但最好将其居中,以防我想在页面底部放置横幅。

此致

IE 和 Firefox 实现 elementScrollBehavior。它是为整个驱动程序会话的所有元素设置的。其中 0 是默认值,将元素放在视口的顶部,1 将元素滚动到视口的底部。

caps = Selenium::WebDriver::Remote::Capabilities.firefox('elementScrollBehavior' => 1)
Watir::Browser.new :firefox, desired_capabilities: caps

要获得更多控制,您需要使用 javascript(Watir 可能应该研究对滚动到元素偏移量的更直接支持)。

browser.execute_script('javascript:window.scrollBy(250,350)')