如何在rspec中使用capybara来点击下拉选项

u19*_*964 20 testing rspec ruby-on-rails logout capybara

我在rails 3.2.3和capybara上使用ruby来帮助创建请求规范.我的目标是创建一个测试注销的规范请求.网页:

<li class="dropdown">
  <a class="dropdown-toggle" data-toggle="dropdown">
    Welcome <%= current_user.first_name + " "+ current_user.last_name%>
    <b class="caret"></b>
  </a>
  <ul class="dropdown-menu">
    <a href="#">
      <%= link_to "Sign out", destroy_user_session_path, :method => :delete%>
    </a>
  </ul>
</li>
Run Code Online (Sandbox Code Playgroud)

对于测试,我有

describe "sign out" do
  it "should let user to sign out" do
    login_as user, :scope => :user
    # click_on "Welcome #{user.first_name} #{user.last_name}"
    # Now click on Sign out
  end
end
Run Code Online (Sandbox Code Playgroud)

我不知道如何使用capybara点击退出,因为它位于下拉菜单中,因此在页面上不可见.有人知道吗 ?

有没有其他方法可以点击下拉菜单中的元素?

DVG*_*DVG 8

我通过点击两个链接测试了一个下拉列表

click_link "Welcome #{current_user.first_name} #{current_user.last_name}"
click_link 'sub link'
Run Code Online (Sandbox Code Playgroud)

  • 改变'它'我的例子"do`到'它'我的例子",js:true do`By默认这会启动Firefox并运行selenium的例子,所以你可以看到它运行.您可以在最后添加一个睡眠,这样您就有时间接受正在发生的事情 (2认同)

u19*_*964 5

你好我最终想通了.我不得不用来xpath找到链接.基于html以上所述,这是我做的:

在rspec中,我写道:

page.find(:xpath, "//a[@href='/users/sign_out']").click
Run Code Online (Sandbox Code Playgroud)

我使用"// a [@href ='/ users/sign_out']"的原因是因为它link_to "Sign out", destroy_user_session_path, :method => :delete被编译到<a href="/users/sign_out" ...网页上.

它的工作原理:-)

哦顺便说一句,我找到了这个有用的链接:http://www.suffix.be/blog/click_image_in_link_capybara


nfr*_*d21 5

一个更简单的解决方案就是这样:

select("您要从菜单中选择的选项", :from => "标签名称")

注意:“标签名称”是<label>. 但是,您也可以使用<select>此处的“id”或“name”属性,我认为这更好,因为您可能会在某个时候更改标签文本,如果您这样做,您的测试仍然会通过。

  • “选择”不适用于非 html 选择框元素。问题是关于“按钮下拉菜单”(如 twitter bootsrap one),它不是 html 选择框。 (2认同)
  • 这个答案实际上解决了问题的标题。我想这就是它拥有最多选票的原因。 (2认同)