2011-10-23 11 views
7

Estoy probando la entrada de un lector de código de barras ... se comporta como el teclado pero termina con cada código de barras con la tecla enter. Mi javascript detecta la tecla enter y responde (aplicación backbone.js).capybara: complete el valor del campo de formulario con la tecla enter de finalización

¿Cómo puedo "completar" un campo de formulario con una cadena que tiene un valor de tecla Intro?

Mi pila de prueba es pepino/capibara/capibara-webkit.

Respuesta

4

Considere usar Capybara::Driver::Selenium como su controlador de página para ese escenario en particular. Si lo hace, entonces usted puede hacer cosas como esta:

place = page.find_by_id('tinymce').native 
place.send_keys("I rule!") 
place.send_key "\xEE\x80\x83" 
+0

Gracias por su sugerencia. Ya lo había hecho con éxito en Selenium, aunque no tan concisamente como tu sugerencia. Pero estaba tratando de acelerar mis pruebas con capybara-webkit. –

+1

Puede administrar sus escenarios y controladores utilizando etiquetas. Por ejemplo, puede configurar su sistema, por lo que cualquier escenario etiquetado @selenium se ejecuta con el controlador Selenium. De esta forma, puede obtener la velocidad del controlador de webkit en la mayoría de sus escenarios y usar el selenio para problemas. Buena suerte :) – socjopata

8

En realidad, parece que sólo puede enviar un \ n al método set nativa de capibara y lograr el mismo efecto (de una manera más flexible y conductor agnóstico camino).

Así que en mi código, esto está trabajando actualmente para desencadenar una presenten evento de formulario (manejado por JS):

field = find("form input[type=text]") 
    field.set "my comment\n" 

(Tenga en cuenta que, como el autor de la solicitud de extracción explica here, esto sólo funciona si usted está vinculando al evento de keydown específico, no si está vinculando al envío del formulario que debería resultar de él.)

+0

No es del todo agnóstico del controlador: depende de cómo el controlador implemente la entrada del formulario. Por ejemplo, poltergeist solo llamó a un evento de cambio no hace mucho tiempo, en lugar de keydown y el lote. ([Vea este ticket] (https://github.com/jonleighton/poltergeist/issues/43)) Para mí, esto funcionó en selenio y no en poltergeist, estoy verificando eventos de pulsación de tecla para 'e.keycode == 13 ' –

+0

Esto tampoco me funcionó en Poltergeist. Al depurarlo, parece que los eventos de pulsación de tecla enviados siempre tienen 'e.which == 0', que aparentemente se debe a un error en WebKit que ha existido por siempre y casi no recibe atención https://bugs.webkit.org/show_bug .cgi? id = 16735 –

Cuestiones relacionadas