-
-
Notifications
You must be signed in to change notification settings - Fork 257
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Made TestHelpers include methods from WaitForLoaded
Right now many of the test helpers don't work in any other project because they rely on methods from WaitForLoaded and the test helpers crash when they are called. This isn't an issue in the avo project itself because the WaitForLoaded methods are required automatically by the avo test suite. It isn't possible to load WaitForLoaded in projects using the rubygem of avo because files inside the spec directory aren't included (and even if they were it would be a bit weird to load something from `spec/support` in a gem). To fix this I've moved WaitForLoaded alongside the TestHelpers module and included it from there so the helper methods can be used in other projects.
- Loading branch information
1 parent
5a60b49
commit 79ea9fb
Showing
4 changed files
with
110 additions
and
105 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,108 @@ | ||
require "timeout" | ||
|
||
module Avo | ||
module WaitForLoaded | ||
def wait_for_route_loading(time = Capybara.default_max_wait_time) | ||
Timeout.timeout(time) { sleep(0.01) until page.find("body")[:class].include?("route-loading") } | ||
end | ||
|
||
def wait_for_route_loaded(time = Capybara.default_max_wait_time) | ||
Timeout.timeout(time) { sleep(0.01) while page.find("body")[:class].include?("route-loading") } | ||
end | ||
|
||
def wait_for_turbo_loaded(time = Capybara.default_max_wait_time) | ||
wait_for_body_class_missing("turbo-loading", time) | ||
end | ||
|
||
def wait_for_search_loaded(time = Capybara.default_max_wait_time) | ||
wait_for_body_class_missing("search-loading", time) | ||
end | ||
|
||
def wait_for_search_to_dissapear(time = Capybara.default_max_wait_time) | ||
wait_for_element_missing(".aa-DetachedOverlay", time) | ||
end | ||
|
||
def wait_for_turbo_frame_id(frame_id = "", time = Capybara.default_max_wait_time) | ||
wait_for_element_missing("turbo-frame[id='#{frame_id}'][busy]", time) | ||
end | ||
|
||
def wait_for_turbo_frame_src(frame_src = "", time = Capybara.default_max_wait_time) | ||
wait_for_element_missing("turbo-frame[src='#{frame_src}'][busy]", time) | ||
end | ||
|
||
def wait_for_body_class_missing(klass = "turbo-loading", time = Capybara.default_max_wait_time) | ||
Timeout.timeout(time) do | ||
body = page.find(:xpath, "//body") | ||
break if !body[:class].to_s.include?(klass) | ||
|
||
if page.present? && body.present? && body[:class].present? && body[:class].is_a?(String) | ||
sleep(0.1) until page.present? && !body[:class].to_s.include?(klass) | ||
else | ||
sleep 0.1 | ||
end | ||
end | ||
rescue Timeout::Error | ||
puts "\n\nMethod '#{__method__}' raised 'Timeout::Error' after #{time}s" | ||
end | ||
|
||
def wait_for_element_missing(identifier = ".element", time = Capybara.default_max_wait_time) | ||
Timeout.timeout(time) do | ||
if page.present? | ||
break if page.has_no_css?(identifier, wait: time) | ||
else | ||
sleep 0.05 | ||
end | ||
end | ||
end | ||
|
||
def wait_for_element_present(identifier = ".element", time = Capybara.default_max_wait_time) | ||
Timeout.timeout(time) do | ||
if page.present? | ||
break if page.has_css?(identifier, wait: time) | ||
else | ||
sleep 0.05 | ||
end | ||
end | ||
end | ||
|
||
def wait_for_loaded | ||
wait_for_turbo_loaded | ||
end | ||
|
||
def wait_for_action_dialog_to_disappear(time = Capybara.default_max_wait_time) | ||
wait_for_element_missing("[role='dialog']", time) | ||
end | ||
|
||
def wait_for_tag_to_disappear(tag, time = Capybara.default_max_wait_time) | ||
Capybara.using_wait_time(time) do | ||
page.has_no_css?(".tagify__tag", text: tag) | ||
end | ||
end | ||
|
||
def wait_for_tag_to_appear(tag, time = Capybara.default_max_wait_time) | ||
Capybara.using_wait_time(time) do | ||
page.has_css?(".tagify__tag", text: tag) | ||
end | ||
end | ||
|
||
def wait_for_tag_suggestions_to_appear(time = Capybara.default_max_wait_time) | ||
Capybara.using_wait_time(time) do | ||
page.has_css?(".tagify__dropdown") | ||
end | ||
|
||
current_count = prev_count = page.all('.tagify__dropdown__item').count | ||
Check failure on line 93 in lib/avo/wait_for_loaded.rb GitHub Actions / lint / runner / standardrb
|
||
attempts = 5 | ||
|
||
loop do | ||
sleep(0.05) | ||
current_count = page.all('.tagify__dropdown__item').count | ||
Check failure on line 98 in lib/avo/wait_for_loaded.rb GitHub Actions / lint / runner / standardrb
|
||
|
||
# Break when suggestions stop appearing | ||
# Or attempts reach 0 | ||
attempts -= 1 | ||
break if (current_count == prev_count) || (attempts == 0) | ||
prev_count = current_count | ||
end | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.