summaryrefslogtreecommitdiff
path: root/spec/support/helpers/capybara_helpers.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/support/helpers/capybara_helpers.rb')
-rw-r--r--spec/support/helpers/capybara_helpers.rb43
1 files changed, 43 insertions, 0 deletions
diff --git a/spec/support/helpers/capybara_helpers.rb b/spec/support/helpers/capybara_helpers.rb
new file mode 100644
index 00000000000..bcc2df44708
--- /dev/null
+++ b/spec/support/helpers/capybara_helpers.rb
@@ -0,0 +1,43 @@
+module CapybaraHelpers
+ # Execute a block a certain number of times before considering it a failure
+ #
+ # The given block is called, and if it raises a `Capybara::ExpectationNotMet`
+ # error, we wait `interval` seconds and then try again, until `retries` is
+ # met.
+ #
+ # This allows for better handling of timing-sensitive expectations in a
+ # sketchy CI environment, for example.
+ #
+ # interval - Delay between retries in seconds (default: 0.5)
+ # retries - Number of times to execute before failing (default: 5)
+ def allowing_for_delay(interval: 0.5, retries: 5)
+ tries = 0
+
+ begin
+ sleep interval
+
+ yield
+ rescue Capybara::ExpectationNotMet => ex
+ if tries <= retries
+ tries += 1
+ sleep interval
+ retry
+ else
+ raise ex
+ end
+ end
+ end
+
+ # Refresh the page. Calling `visit current_url` doesn't seem to work consistently.
+ #
+ def refresh
+ url = current_url
+ visit 'about:blank'
+ visit url
+ end
+
+ # Simulate a browser restart by clearing the session cookie.
+ def clear_browser_session
+ page.driver.browser.manage.delete_cookie('_gitlab_session')
+ end
+end