Подтвердить что ты не робот

Как использовать 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, потому что он находится в выпадающем меню, поэтому не отображается на странице. Кто-нибудь знает?

Есть ли другой способ щелкнуть элемент в выпадающем меню?

4b9b3361

Ответ 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