ruby-on-rails - rack_test - ruby on rails selenium
¿Cómo marcar una casilla de verificación en capibara? (9)
.set (true) no funcionó para mí, así que tuve que llamar .click:
find(...).click
Estoy usando Rspec y Capybara.
¿Cómo puedo escribir un paso para marcar una checkbox
? He intentado check
por valor pero no puede encontrar mi checkbox
. No estoy seguro de qué hacer, ya que de hecho tengo el mismo ID con diferentes valores
Aquí está el código:
<input id="cityID" type="checkbox" style="text-align: center; opacity: 0;" value="61" name="cityID">
<input id="cityID" type="checkbox" style="text-align: center; opacity: 0;" value="62" name="cityID">
<input id="cityID" type="checkbox" style="text-align: center; opacity: 0;" value="63" name="cityID">
Al ejecutar la prueba de capibara, obtuviste el objeto de la page
. Esto puede usar para marcar / desmarcar cualquier casilla de verificación. Como @buruzaemon ya mencioné:
para buscar y marcar una casilla de verificación por nombre, id o texto de etiqueta.
Así que supongamos que tienes una casilla de verificación en tu html como:
<label>
<input type="checkbox" value="myvalue" name="myname" id="myid">
MyLabel
</label>
Puede verificar esto con:
page.check(''myid'')
page.check(''MyLabel'')
page.check(''myname'')
Desmarcar es lo mismo que usar el método page.uncheck
.
Creo que primero debes dar id
únicos a los elementos de tu formulario .
Pero con respecto a Capybara y casillas de verificación, el here le permitirá buscar y marcar una casilla de verificación por nombre, id o texto de etiqueta.
Encontré que lo siguiente funcionó para mí:
# Check
find(:css, "#cityID[value=''62'']").set(true)
# Uncheck
find(:css, "#cityID[value=''62'']").set(false)
Es mejor no crear múltiples elementos con el mismo ID , para que (y no solo para eso) pueda marcar / desmarcar fácilmente una casilla de verificación con elegante
check ''cityID''
uncheck ''cityID''
Si uno no puede evitar múltiples elementos con la misma identificación y aún necesita marcar una casilla de verificación con cierto valor , puede hacerlo con
find(:css, "#cityID[value=''62'']").set(true)
find(:css, "#cityID[value=''62'']").set(false)
Más información sobre las manipulaciones de entrada de capibara se puede encontrar here
Sé que esta es una pregunta anterior, pero he estado trabajando en esto yo mismo, y habiendo probado todo lo anterior, esto es lo que finalmente funcionó para mí:
find("input[type=''checkbox''][value=''#{cityID.id}'']").set(true)
Espero que esto sea útil para alguien. Estoy usando Capybara 2.4.4.
También puede verificar que todas las casillas de verificación no estén marcadas con este ejemplo.
all (''input [type = checkbox]''). cada casilla de verificación | hacer | checkbox.should_not be_checked end
también puede usar: xpath en lugar de: css si tiene problemas para encontrarlo.
find (: xpath, ''//*[@id="example"]'').set(true)
en Chrome (y seguramente en otros navegadores), puede "inspeccionar el elemento" y luego al hacer clic con el botón derecho en el elemento que le interesa, aparece ''copy xpath'' si no sabe qué era xpath, ahora lo hace.
check find(".whenever input")[:id]
Creo que esto hará que el capibara espere a que cualquier oyente de eventos se adjunte a esa entrada, que a veces es un dolor en el culo si no espera ... Si esa entrada no tiene una ID, elija otra propiedad (debe haber uno) ...