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.