Capybara selenium驱动器,盘旋元素

时间:2011-12-19 19:04:59

标签: ruby-on-rails-3 selenium rspec cucumber capybara

我正在测试的应用程序最初隐藏了一些元素。当鼠标悬停在单独的元素上时,它们将通过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

有没有办法让它正常工作?

3 个答案:

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