22

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

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

对于测试,我有

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

我不知道如何单击使用水豚注销,因为它位于下拉菜单中,因此在页面上不可见。有人知道吗 ?

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

4

5 回答 5

8

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

click_link "Welcome #{current_user.first_name} #{current_user.last_name}"
click_link 'sub link'
于 2012-06-30T02:50:24.300 回答
5

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

在 rspec 中,我写道:

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

我使用 "//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

于 2012-06-30T01:20:32.093 回答
5

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

select("你想从菜单中选择的选项", :from => "label name")

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

于 2012-12-27T19:05:27.083 回答
1

我的例子

find("ol.nya-bs-select.btn-default.form-control[ng-model='scope.values.countries']")
    .find_button("Nothing selected").click
于 2015-10-19T18:29:04.927 回答
1

我遇到了类似的问题,但我的下拉列表没有任何文字,只有图标:

%li#user-menu.dropdown
  %a.dropdown-toggle{ href: "#", data: { toggle: "dropdown" }, role: "button", aria: { haspopup: "true", expanded: "false" } }
    %i.fa.fa-user
    %span.caret
  %ul.dropdown-menu
    %li.logout-text= link_to "Log Out", destroy_user_session_path, :method => :delete

在我的规范中,我使用了:

def when_I_sign_out
  find('#user-menu').click
  click_on 'Log Out'
end
于 2016-02-11T19:15:06.033 回答