Как использовать capybara в rspec, чтобы выбрать раскрывающийся список
Я использую 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
Я не знаю, как щелкнуть по выходу с помощью capybara, потому что он находится в выпадающем меню, поэтому не отображается на странице. Кто-нибудь знает?
Есть ли другой способ щелкнуть элемент в выпадающем меню?
Ответы
Ответ 1
Привет, я понял это в конце концов. Мне пришлось использовать 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
Ответ 2
Я тестировал выпадающий список, просто нажав обе ссылки
click_link "Welcome #{current_user.first_name} #{current_user.last_name}"
click_link 'sub link'
Ответ 3
Более простым решением является просто следующее:
выберите ( "параметр, который вы хотите выбрать из меню",: from = > "название метки" )
ПРИМЕЧАНИЕ. "Имя метки" является фактическим текстом <label>
. Однако вы также можете использовать атрибут "id" или "name" для <select>
, который, я думаю, лучше, так как вы можете изменить текст ярлыка в какой-то момент, и если вы это сделаете, ваши тесты все равно пройдут.
Ответ 4
Мой пример для этого
find("ol.nya-bs-select.btn-default.form-control[ng-model='scope.values.countries']")
.find_button("Nothing selected").click
Ответ 5
У меня была аналогичная проблема, но в моем выпадающем списке не было текста, только значки:
%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