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
ドロップダウンメニューにあるため、ページに表示されないため、カピバラを使用してサインアウトをクリックする方法がわかりません。誰か知っている ?
ドロップダウンメニューの要素をクリックする他の方法はありますか?
こんにちは私は最終的にそれを理解しました。リンクを見つけるにはxpath
を使用する必要がありました。上記のhtml
に基づいて、これが私がしたことです:
Rspecで、私は書いた:
page.find(:xpath, "//a[@href='/users/sign_out']").click
「// a [@ href = '/ users/sign_out']」を使用する理由は、Webページで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
両方のリンクをクリックするだけでドロップダウンをテストしました
click_link "Welcome #{current_user.first_name} #{current_user.last_name}"
click_link 'sub link'
はるかに簡単な解決策は単純にこれです:
select( "メニューから選択したいオプション"、:from => "ラベル名")
注:「ラベル名」は、<label>
の実際のテキストです。ただし、ここでも<select>
の「id」または「name」属性を使用できます。これは、ある時点でラベルテキストを変更する可能性があるため、変更した場合でもテストは引き続き実行されるため、より良いと思います。パス。
これの私の例
find("ol.nya-bs-select.btn-default.form-control[ng-model='scope.values.countries']")
.find_button("Nothing selected").click
同様の問題が発生しましたが、ドロップダウンにテキストがなく、アイコンのみが含まれていました。
%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