2011-01-14 13 views
10

Estoy aprendiendo a escribir pruebas con pepino/webrat. Uno de mis escenarios de prueba está configurado para probar la validación del formulario (dejando los campos vacíos). Curiosamente, los campos que no completé con fill_in se configuran en el atributo name del campo. Esto solo ocurre cuando uso pepino, cuando uso un navegador esto no sucede.webrat autofilling campos de formulario

El paso que estoy usando es sencillo:

When /^I submit the form$/ do 
    # Not filling in the 'Name' field here 
    fill_in 'Description', :with => 'This is a description' 
    click_button 'Save' 
end 

Después de ejecutar el escenario que utiliza el paso anterior, puedo ver que el campo de texto "Nombre" está ajustado a "nombre" en lugar de estar vacío. Este es también el caso si completo en ese campo con un espacio vacío o nil:

fill_in 'Name', :with => '' 

La forma en que estoy probando es bastante simple:

<form action="/item/create" method="post"> 
    <div> 
    <label for="ItemName">Name</label> 
    <input type="text" name="name" id="ItemName" /> 
    </div> 
    <div> 
    <label for="ItemDescription">Description</label> 
    <textarea name="description" id="ItemDescription"></textarea> 
    </div> 
    <input type="submit" value="Save" /> 
</form> 

Alguna idea de por qué ocurre esto?

+0

+1 Por un problema interesante. No puedo esperar hasta que alguien lo imagine. – raidfive

+0

¿Qué sucede si completa el nombre, pero no la descripción?Me pregunto si has golpeado una caja de borde con la etiqueta, el atributo y el valor siendo "nombre" –

+0

@Mark, si llené el nombre pero no la descripción, llenaría el campo de descripción con el literal " description "que es el valor del nombre attrib de ese campo. – dmondark

Respuesta

2

Supongo que estás usando Webrat con el adaptador Mechanize, ¿verdad? Si es así, me sentí muy frustrado por el mismo problema. Resulta que es un error en la forma en que Webrat pasa los valores de campo de campo a Mechanize. Puede encontrar detalles y un parche aquí: https://webrat.lighthouseapp.com/projects/10503/tickets/384-webrat-does-not-pass-empty-form-fields-correctly-to-mechanize

Alternativamente, si no desea utilizar una versión parcheada de Webrat, una solución ligeramente no óptima es en su lugar fill_in con espacios en blanco ('') y asegúrese de que su la validación de entrada de la aplicación recorta o ignora los espacios en blanco al considerar si un campo se ha rellenado correctamente.

Lamentablemente, parece que hay una serie de problemas como este, que han contribuido con parches que no se han fusionado en la base de código Webrat "oficial". Le envié un correo electrónico al autor hace aproximadamente un mes y medio para preguntarle si todavía lo mantenía y, de no ser así, considerar llamar a alguien que lo haría, ya que mucha gente todavía lo usa. Hasta la fecha, todavía no he recibido una respuesta.

+0

Miquel, gracias por su respuesta y el parche. Soluciona el problema (Sí, estoy/estaba usando Machanize). Debo mencionar que desde entonces hemos cambiado a Capybarra, que es algo que la mayoría ha estado haciendo, parece. Capybarra ha sido bastante estable y la forma en que maneja los controladores es bastante clara. También escuché que Webrat ya no se mantiene, pero no puedo confirmarlo. – dmondark

1

Una cosa que puedes probar es asegurarte de que la función autocompletar esté desactivada en ese campo (autocompletar = "apagado") para ver si eso afecta el resultado.

<form action="/item/create" method="post"> 
    <div> 
    <label for="ItemName">Name</label> 
    <input type="text" name="name" id="ItemName" autocomplete="off" /> 
    </div> 
    <div> 
    <label for="ItemDescription">Description</label> 
    <textarea name="description" id="ItemDescription"></textarea> 
    </div> 
    <input type="submit" value="Save" /> 
</form> 
+0

tuvimos que hacer eso porque la autocompleta en Firefox estaba llenando los campos en nuestra prueba. Además, si tiene un campo de contraseña, lo rellenará con su contraseña en el caché de relleno de formulario y también rellenará el campo de texto antes de la contraseña, sin importar el nombre de ese campo, con el nombre de usuario en el formulario-relleno caché – Ben

+0

Dang, parece que sería difícil de rastrear:/¿Podría ejecutar Firefox en otro perfil de usuario o de incógnito para evitar que esto suceda? – raidfive

+0

Esto estaba en nuestro banco de pruebas cuando usaba selenio. No estoy seguro de cómo decir que se ejecute en un perfil diferente. Pero no fue necesario porque ** autocomplete = "off" ** solucionó nuestros problemas y era un campo que no queríamos que se autocompletara de todos modos. – Ben

0

¿Puedes probar algo como esto dentro del paso?

% Dada {I rellenar "nombre" con ""}

O mejor aún, en el uso de archivos función

Dado que rellenar "nombre con "".

me gustaría también sugieren trasladarse a Carpincho, se pueden hacer cosas como esta:

https://github.com/jnicklas/capybara/issues/issue/219

Lo que le permitirá configurar los perfiles de Firefox para sus pruebas de selenio.

+0

Gracias Tyler. Ya he intentado pasar una cadena vacía (y una nula) pero aún así la llenaría con el nombre del campo. Ciertamente miraré a Capibara, pero no estoy usando Firefox/Selenio. Solo webrat en este punto. – dmondark

Cuestiones relacionadas