what tutorial rails docs ruby-on-rails testing rspec capybara logout

ruby-on-rails - tutorial - selenium rails



Cómo usar capybara en rspec para hacer clic en una opción desplegable (5)

Estoy usando ruby ​​on rails 3.2.3 y capybara para ayudar a crear especificaciones de solicitud. Mi objetivo es crear una solicitud de especificaciones que pruebe el cierre de sesión. La página web:

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

Para la prueba, tengo

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

No sé cómo hacer clic en Cerrar sesión usando capybara porque está en un menú desplegable, por lo tanto no está visible en la página. Alguien sabe ?

¿Hay alguna otra manera de hacer clic en un elemento en un menú desplegable?


He probado un menú desplegable simplemente haciendo clic en ambos enlaces

click_link "Welcome #{current_user.first_name} #{current_user.last_name}" click_link ''sub link''


Hola, lo descubrí eventualmente. Tuve que usar xpath para encontrar el enlace. Basado en el html anterior, aquí está lo que hice:

En rspec, escribí:

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

La razón por la que uso "// a [@href = ''/ users / sign_out'']" es porque el link_to "Sign out", destroy_user_session_path, :method => :delete se compila a <a href="/users/sign_out" ... en la página web.

Y funciona :-)

Por cierto, encontré este enlace útil: http://www.suffix.be/blog/click_image_in_link_capybara


Mi ejemplo para esto

find("ol.nya-bs-select.btn-default.form-control[ng-model=''scope.values.countries'']") .find_button("Nothing selected").click


Tuve un problema similar, pero mi menú desplegable no tenía ningún texto, solo íconos:

%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

En mi especificación utilicé:

def when_I_sign_out find(''#user-menu'').click click_on ''Log Out'' end


Una solución mucho más fácil es simplemente esta:

seleccione ("opción que desea seleccionar del menú",: desde => "nombre de etiqueta")

NOTA: El "nombre de la etiqueta" es el texto real de <label> . Sin embargo, también puede usar el atributo "id" o "nombre" de <select> aquí, lo cual creo que es mejor, ya que puede cambiar el texto de la etiqueta en algún momento y, si lo hace, sus pruebas aún pasarán.