如何使用红宝石在Catybara中悬停鼠标?

时间:2014-04-30 22:18:25

标签: ruby selenium cucumber capybara

我在 Capybara 中使用 Selenium 尝试了以下操作,但它无效。

find('#element').trigger(:mouseover)

page.find("#element").click

page.execute_script("$('#element').trigger('mouseover')")

find(:css,#element').hover

**capybara webkit**
还有一个我没有尝试过。 你能建议吗?

2 个答案:

答案 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