在 Watir 的表单内滚动

Scrolling inside a form in Watir

我正在 运行 使用 Ruby-Watir-Rspec 对网络应用程序进行测试。这很简单,因为我是初学者。 我打开一个表格并输入所需的信息,但是 "Create" 按钮不在可见区域,所以我收到消息:

Failure/Error: @browser.button(class: xxx).click

     Watir::Exception::UnknownObjectException:
       element located, but timed out after 30 seconds, waiting for #<Watir::Button: located: true; {:class=>xxx, :tag_name=>"button"}> to be present

Caused by:
     # Selenium::WebDriver::Error::ElementNotVisibleError:
     #   element not interactable

如果我在脚本 运行 时滚动,它会点击按钮并且测试成功。 我尝试了 scroll.to、wait_until_present,滚动到坐标,其中 scroll_into_view、none 有效。 让它工作的唯一方法是多次放置“@browser.send_keys :tab”,直到它到达表单底部的按钮。

我认为问题出在 表单内的按钮 没有占用整个页面(表单后面是地图,因此页面的一部分没有滚动选项)...那么有什么方法可以在表单内滚动吗?或者您知道找到此按钮的其他方法吗?任何提示表示赞赏。
顺便说一句,页面已最大化。

这是代码片段,很简单:

it 'should create the place' do
    @browser.button(class: xxx).click
end

尝试使用 Watir Scroll gem:https://github.com/p0deje/watir-scroll 并将元素滚动到视口的中心:button.scroll.to :center

您也可以直接提交表单@browser.form.submit

我的猜测是,这是一个自定义的可滚动元素,它以 overflow: hidden 样式隐藏了内容。溢出中的元素不被考虑 visible/present。当您手动滚动时,您会将元素从溢出中移出,以便它出现。

我以前见过其中的一些。每个人都需要不同的滚动方法。没有确切的 HTML/CSS,很难说如何滚动元素。

但是,如果您不想测试滚动,则可以手动触发点击事件。这将绕过可见性要求:

@browser.button(class: xxx).click!