我在 Capybara 中使用 Selenium 尝试了以下操作,但它无效。
find('#element').trigger(:mouseover)
或
page.find("#element").click
或
page.execute_script("$('#element').trigger('mouseover')")
或
find(:css,#element').hover
或
**capybara webkit**
还有一个我没有尝试过。
你能建议吗?
答案 0 :(得分:1)
尝试:
page.execute_script("$('#element').trigger('mouseenter')")
要获得干净的解决方案,您需要安装capybara-webkit
gem。在您的spec_helper中添加:
RSpec.configure do |config|
# ... Your configuration
Capybara.javascript_driver = :webkit
end
有了这个,你应该能够用以下方式触发事件:
page.find('#element').trigger(:mouseover)
答案 1 :(得分:0)
当无效时,您可以模拟幕后发生的事情。
鉴于我的HTML(正文)
<body>
<div id="myHiddenDiv">
<a href="to/home/">A (not visible) link I'd like to click on</a>
</div>
</body>
鉴于我的CSS:
div#myHiddenDiv
{
visibility: hidden;
}
div#myHiddenDiv:hover
{
visibility: visible;
}
没有jQuery,没有webkit(但是使用Selenium),我可以这样做:
feature 'My div becomes visible' do
scenario 'I can fake mouseover' do
expect(page).not_to have_tag('div#myHiddenDiv', visible: true);
# As if I mouseovered
page.execute_script(<<-JS)
let div = 'document.querySelector('div#myHiddenDiv');
div.style.visibility = 'visible';
JS
expect(page).to have_tag('div#myHiddenDiv', visible: true);
click_link("A (not visible) link I'd like to click on")
# And go on!…
end
end