2011-11-02 16 views
5

Estoy intentando probar seleccionando una opción de la etiqueta de selección (estas opciones se obtienen de un servidor de base de datos remoto). Durante la interacción normal con el sitio web, no se necesita más de una fracción de segundo para completar este menú desplegable. Sin embargo, cuando ejecuto la siguiente prueba,Carpincho no esperando la solicitud de ajax para completar

 


    When /^(?:|I)select "([^"]*)" from "([^"]*)" in search form$/ do |value, field| 
     within "#select_container" do 
     save_and_open_page 
     page.should have_css("#criteria_div_code > option:nth-child(10)") 
     select(value, :from => field) 
     end 
    end 

 

me sale el siguiente error,

expected css "#criteria_div_code > option:nth-child(10)" to return something (RSpec::Expectations::ExpectationNotMetError)

El menú desplegable se rellena con al menos 20 opciones y por lo que sólo probar la presencia de la 10ma opción (por ahora).

save_and_open_page muestra que solo existe una opción (opción predeterminada) en lugar de al menos 10 y, por lo tanto, aparece el "ExpectionNotMetError".

Capybara.default_wait_time = 30 - Mucho tiempo para que las listas se llenen.

¿No está el capibara esperando que termine la llamada ajax?

¿Falta algo aquí?

+0

¿Ha etiquetado el escenario como '@ javascript'? – Chowlett

Respuesta

0

Creo que se necesita para conducir js de usuario para las pruebas de ajax,

describe 'some stuff which requires js', :js => true do 
    it 'will use the default js driver' 
    it 'will switch to one specific driver', :driver => :celerity 
end 

También tenga en cuenta la siguiente línea - Carpincho puede bloquear y esperar a que las peticiones Ajax para terminar después de haber interactuado con la página. Para habilitar este comportamiento, configure la opción: resincronizar el controlador en verdadero.

2

Es posible que desee comprobar mi respuesta a la configuración de tiempos de espera para ajax resincronización Using Capybara for AJAX integration tests. El tiempo de espera de resincronización está predeterminado en 10 segundos y si su respuesta no regresa antes de ese momento, no obtendrá ninguna respuesta, especialmente si ha configurado: resincronizar a falso en sus configuraciones. a continuación se muestra un fragmento de establecer que el tiempo de espera

Capybara.register_driver :selenium do |app| 
    Capybara::Selenium::Driver.new(app, :browser => :firefox, :resynchronization_timeout => 1000) 
end 

NOTA: si se establece previamente: resincronizar a falso, es necesario configurar esta propiedad a true.

+2

Con 'Capybara' versión 2.0.3 esto causa este error:' unknown option: {: resynchronization_timeout => 1000} (ArgumentError) ' – etagwerker

+0

@etagwerker tienes razón. Las opciones: synchronize se han eliminado del controlador Selenium y, como tal, probablemente no funcionarán para la versión más nueva del controlador Selenium. La solución anterior era para versiones de Capybara de menos de 2.0.3 acompañadas con una versión anterior del controlador de Selenium. –

Cuestiones relacionadas