what tutorial rails ruby rspec capybara browser-automation

ruby - tutorial - ¿Cómo usar sincronizar en Capibara exactamente?



rails 5 rspec (2)

Si el uso de wait_until es bastante claro (he usado los métodos de este tipo al crear pruebas a través de los métodos nativos de Webdriver), pero no el nuevo método de sincronización (lo siento :). He leído el tema sobre por qué wait_until está en desuso, he leído el artículo sobre eso, he leído los documentos con la descripción del método y también he leído el código donde también está presente la descripción. Pero no encontré ningún ejemplo o tutorial sobre cómo usar exactamente este método.

Alguien, por favor, proporcione algunos casos donde yo (y tal vez alguien más) pude ver y aprender a usar este método

Por ejemplo, el caso

expect(actual).to equal(expected)

¿Dónde debería "poner" el método de sincronización para obtener una excepción negativa solo después de que se haya pasado el tiempo de espera?

UPD: para aquellos interesados, miren estos enlaces:

http://www.elabs.se/blog/53-why-wait_until-was-removed-from-capybara

https://github.com/jnicklas/capybara/blob/master/lib/capybara/node/base.rb#L44


Vea este método de ayuda que podría ayudarlo. Encontrado en https://gist.github.com/10c41024510ee9f235e0

# spec/support/capybara_helpers.rb module CapybaraHelpers def wait_for_whizboo start = Time.now while true break if [check for whizboo here, e.g. with page.evaluate_script] if Time.now > start + 5.seconds fail "Whizboo didn''t happen." end sleep 0.1 end end end RSpec.configure do |config| config.include CapybaraHelpers, type: :request end


Acabo de encontrar un caso en el que necesitaba usar #synchronize. Tengo un método de ayuda que busca un elemento en la página y si existe, hace clic en él y devuelve un texto que se actualiza en la página (a través de JavaScript). Hay casos en los que, entre encontrar el elemento y hacer clic en él, podría desaparecer (y posiblemente volver a aparecer) debido a otro código JavaScript y podría generar una excepción Selenium :: WebDriver :: Error :: StaleElementReferenceError. Así que uso sincronizar así:

page.document.synchronize do element = first(''#whatever'') if element element.click find(''#foo'').text else nil end end