ruby on rails - example - ¿Cómo escribo una afirmación de Capybara que comprueba la presencia de un botón y su estado habilitado o deshabilitado?
ruby on rails selenium (5)
Desde una situación similar en la que las acciones del usuario en la IU (selección de tipos de documentos) activan los botones para que se habiliten ...
Con una identificación en el control, resulta bastante limpio encontrar el botón (independientemente del estado) y afirmar un estado de "deshabilitado".
@javascript
Scenario: Package generation not allowed unless a document type is selected
Given I view the "Liberty and 4th Building Renovation" project
When I view the Package Creator
Then both document package generation buttons should be disabled
@javascript
Scenario: Package generation allowed when documents types are selected
Given I view the "Liberty and 4th Building Renovation" project
When I view the Package Creator
And I select any document type
Then both document package generation buttons should be enabled
Y los pasos de apoyo de pepino con Capibara:
Then(/^both document package generation buttons should be disabled$/) do
expect(find_by_id(''generate_pdf'')).to be_disabled
expect(find_by_id(''generate_zip'')).to be_disabled
end
Then(/^both document package generation buttons should be enabled/) do
expect(find_by_id(''generate_pdf'')).not_to be_disabled
expect(find_by_id(''generate_zip'')).not_to be_disabled
end
Tengo una aplicación que habilita / deshabilita botones en respuesta a cosas que suceden en la interfaz de usuario.
Puedo usar capibara fácilmente para detectar si existe un botón
should have_button ''save''
pero no tengo idea de cómo verificar el estado del botón de guardar. Es decir:
¿Cómo escribo una afirmación de Capybara que comprueba la presencia de un botón y su estado habilitado o deshabilitado?
He hackeado juntos un cheque para un botón deshabilitado; para habilitado, supongo que podría verificar que hay un botón coincidente y que no hay un botón deshabilitado coincidente. Pero esto, por decir lo menos, es torpe.
Esto parece una comprobación de UI tan fundamental, que estoy seguro de que me he perdido algo, pero parece que no puedo averiguar qué.
Seguimiento basado en la respuesta de gregates:
Como mencioné en el comentario, el comportamiento de Capybara depende del controlador subyacente. Estamos utilizando webkit y devuelve resultados de cadena "true" / "false". Al parecer, otros controladores devuelven verdadero / falso. La gente de Capybara es consciente del problema (github.com/jnicklas/capybara/issues/705), pero sienten (probablemente correctamente) que no es realmente su problema resolverlo.
En lugar de que mis pruebas dependan del controlador que estoy usando, terminé creando un emparejador personalizado:
RSpec::Matchers.define :be_enabled do
match do |actual|
driver_result = actual[:disabled]
# nil, false, or "false" will all satisfy this matcher
(driver_result.nil? || driver_result == false || driver_result == "false").should be_true
end
end
RSpec::Matchers.define :be_disabled do
match do |actual|
driver_result = actual[:disabled]
(driver_result == "disabled" || driver_result == true || driver_result == "true").should be_true
end
end
A continuación, puede escribir:
user_license_area.find_button(''Save'').should be_disabled
Hay muchas maneras de hacer esto. Creo que la mejor manera es simplemente usar selectores css
expect(page).to have_css("#save:enabled")
Este ejemplo asume que ha configurado el ID de css para guardar.
Hay un cheque deshabilitado
it "allows finding elements and checking if they are disabled" do
expect(string.find(''//form/input[@name="bleh"]'')).to be_disabled
expect(string.find(''//form/input[@name="meh"]'')).not_to be_disabled
end
Parece que el manejo de elementos deshabilitados por parte de Capybara ha cambiado, así que pensé en dar una actualización.
Para probar si una página tiene un botón y está habilitada, use:
expect(page).to have_button(''Save'')
Para probar si una página tiene un botón y está deshabilitada, use:
expect(page).to have_button(''Save'', disabled: true)
Este formato funciona con has_field?
, find_field
, etc.
Puede leer más sobre esta actualización en http://www.elabs.se/tag/capybara
ACTUALIZAR
El viejo enlace está roto. Este es el problema de GitHub en el que se discutió la característica y esta es la documentación desafortunadamente estéril del método .
find_button(''save'')[:disabled].should eq "disabled"
Tenga en cuenta que una línea comprobará de forma efectiva la existencia y el estado deshabilitado.
Editar: para habilitado, intente
find_button(''save'')[:disabled].should_not be
(Es posible que sea necesario modificar cualquiera de estas pruebas según la manera en que deshabilite / habilite el botón).