Estoy usando capibara para probar la aplicación de mis rieles para pruebas de integración. En mi aplicación hay muchas llamadas Lightbox y Ajax y js.¿Cómo agregar condición de espera en escenarios de capibara?
@javascript
Scenario: I agree functionatilty
Given I go to the create account page
When I click on button which is given as image "lnkTerms2"
And I follow "i_agree"
Then I go to the create account page
Aquí en el anterior código es lnkTerms2 y la identificación que ayudará a llamar a la función js para abrir una caja de luz. Y estoy recibiendo un error como
Element is not currently visible and so may not be interacted with (Selenium::WebDriver::Error::ElementNotDisplayedError)
[remote server] resource://fxdriver/modules/atoms.js:9519:in `unknown'
[remote server] file:///tmp/webdriver-profile20111117-6876-18cfcfp/extensions/[email protected]code.com/components/nsCommandProcessor.js:256:in `unknown'
[remote server] file:///tmp/webdriver-profile20111117-6876-18cfcfp/extensions/[email protected]/components/nsCommandProcessor.js:305:in `unknown'
[remote server] file:///tmp/webdriver-profile20111117-6876-18cfcfp/extensions/[email protected]/components/nsCommandProcessor.js:320:in `unknown'
[remote server] file:///tmp/webdriver-profile20111117-6876-18cfcfp/extensions/[email protected]/components/nsCommandProcessor.js:197:in `unknown'
(eval):2:in `send'
(eval):2:in `click_link'
./features/step_definitions/web_steps.rb:300:in `/^I click on button which is given as image "([^"]*)"$/'
features/Sign_up_process.feature:61:in `When I click on button which is given as image "lnkTerms2"'
El problema es que esta función se llama en WebDriver, no está recibiendo tiempo para cargar las llamadas javascript y ajax. Y lightbox no abre. Así que por favor sugiero cualquier solución.
Además, si supongamos que escribo la línea
When I click on button which is given as image "lnkTerms2"
después de 4 a 5 declaraciones luego de que funciona bien como se pone en cargar js.
esa no es una buena solución, está agregando un retraso forzado a la ejecución de la prueba; si se reutiliza, esto puede agregar mucho tiempo. la forma correcta de resolver este problema es esperar hasta que un elemento esté visible. – Benja
cualquier forma de suspensión fija, incluso si toma el valor del escenario es generalmente una idea terrible, a menos que el escenario sea realmente sobre la experiencia del usuario que implica esperar esa cantidad específica de tiempo (en lugar de esperar a que la pantalla se actualice, etc. , por ejemplo, 'sincronizar') –