2012-03-21 8 views
7

Estoy escribiendo especificaciones de solicitud ... Uso Capybara ... Y estoy en problemas con algunas ventanas modales.(Capybara) ventana modal de acceso

Lo que realmente quiero en mi prueba es completar un formulario que aparece en una ventana modal.

El modal se crea con Bootstrap desde Twitter (http://twitter.github.com/bootstrap/javascript.html#modals) ... y está pasando por un conjunto de transiciones (pero no sé si esto es relevante para lo que voy a decir).

He intentado algunas soluciones que he encontrado en la web, como:

A) se cambia entre páginas con page.driver.browser.window_handles

page.driver.browser.switch_to.window(page.driver.browser.window_handles.last) 

B) usando wait_until para asegurarse de que las cargas modales

def modal_wrapper_id 
    '#modal-edit' 
end 

def modal_visible 
    wait_until { find(modal_wrapper_id).visible? } 
rescue Capybara::TimeoutError 
    flunk 'Expected modal to be visible.' 
end 

pero ninguno de ellos funcionó ... así que pensé en representar el número de identificadores de ventana en el momento en que la ventana modal está activa ...

Así que hice esto:

puts page.driver.browser.window_handles.length.should == 2 

Y tengo esto:

Failure/Error: page.driver.browser.window_handles.length.should == 2 
      expected: 2 
      got: 1 (using ==) 

Por lo que entiendo, prácticamente mi ventana modal no existe.

Cualquier ayuda en este caso sería muy apreciada.

Gracias.

Respuesta

1

No usé Capybara, pero su problema tiene que ver con el hecho de que el diálogo modal de Bootstrap es realmente un pseudo-modal, en realidad es solo un elemento div y una superposición transparente detrás de él. Un verdadero diálogo modal sería uno creado usando window.confirm, por ejemplo, que de hecho puede ser consultado usando su código de muestra. En su caso, debe darle al elemento div modal un id, y usarlo como un controlador para consultarlo desde Capybara y esperar hasta que su pantalla sea "bloqueada". Sin embargo, no probé nada.

1

Capybara utiliza de forma predeterminada: controlador rack_test. ¿Puedes confirmar que estás usando Selenium WebDriver u otro controlador cuando la apertura de un modalbox es posible?

+0

¡Estoy usando Selenium! 'Capybara.default_driver =: selenium' – adritha84

+0

Ok, no has mencionado esto en tu publicación. Como no veo nada incorrecto, me aseguraré de que realmente invoque esa ventana emergente en su suite de pruebas (al hacer clic en algo, etc., no conozco la lógica comercial). También puedes dormir un poco 10 después de esa acción 'invocando pop-up', solo para fines de prueba. – socjopata

+0

Puse algunas acciones 'sleep' en mi especificación y lo he probado de muchas maneras ... y, como dijiste, tampoco veo nada malo ... Pero aun así, obtengo el error especificado, lo que significa que el identificador de esa ventana modal no existe, por lo que la ventana no existe. – adritha84

Cuestiones relacionadas