我正在测试的应用程序最初隐藏了一些元素。当鼠标悬停在单独的元素上时,它们将通过CSS显示:
.thread_options{
display: none;
}
.btn_thread_options:hover .thread_options{
display: inline;
}
当您将鼠标悬停在.btn_thread_options
元素上时,会显示一些我希望Capybara点击的链接。尝试单击这些而不使用click_link "Send Response"
执行任何操作会给出错误:
Failure/Error: click_link("Send Response")
Selenium::WebDriver::Error::ElementNotVisibleError:
Element is not currently visible and so may not be interacted with
尝试使用其他点击方式,如
page.execute_script("$('.btn_thread_options').trigger('mouseover')")
也不起作用(结果相同)。
也不会先点击该项目以试图强制它被鼠标悬停:
page.find(".btn_thread_options").click
有没有办法让它正常工作?
答案 0 :(得分:6)
对Capybara来说这是added:
find(:css, "#menu").hover
答案 1 :(得分:3)
你可以尝试直接显示元素而不是鼠标悬停。
page.execute_script("$('.thread_options').css('display','inline')")
也许还会调查ignore_hidden_elements
的设置。它默认为false,但也许你将它设置为true。
或者代替显示无,将边距设置为较大的负值。
/* Move the element off the screen */
.thread_options{
margin: -9999px 0 -9999px 0;
}
/* Set the desired display margins
.btn_thread_options:hover .thread_options{
margin: 10px 0 10px 0;
}
答案 2 :(得分:1)
我找到了一种使用Capybara + Selenium驱动程序来模拟“鼠标悬停”的方法。这段代码对我有用:
module Capybara
module Node
class Element
def hover
@session.driver.browser.action.move_to(self.native).perform
end
end
end
end