Merge branch 'qa-nightly-72-stablize-select-kind' into 'master'

Stablize select_kind using retry_on_exception

Closes gitlab-org/quality/nightly#72

See merge request gitlab-org/gitlab-ce!25027
This commit is contained in:
Dan Davison 2019-02-12 08:27:34 +00:00
commit a9c4eaf992
5 changed files with 28 additions and 11 deletions

View File

@ -24,7 +24,7 @@ module QA
end
end
def with_retry(max_attempts: 3, reload: false)
def retry_until(max_attempts: 3, reload: false)
attempts = 0
while attempts < max_attempts
@ -39,6 +39,21 @@ module QA
false
end
def retry_on_exception(max_attempts: 3, reload: false, sleep_interval: 0.0)
attempts = 0
begin
yield
rescue StandardError
sleep sleep_interval
refresh if reload
attempts += 1
retry if attempts < max_attempts
raise
end
end
def scroll_to(selector, text: nil)
page.execute_script <<~JS
var elements = Array.from(document.querySelectorAll('#{selector}'));

View File

@ -45,15 +45,17 @@ module QA
private
def select_kind(kind)
within_element(:new_project_or_subgroup_dropdown) do
# May need to click again because it is possible to click the button quicker than the JS is bound
wait(reload: false) do
click_element :new_project_or_subgroup_dropdown_toggle
retry_on_exception(sleep_interval: 1.0) do
within_element(:new_project_or_subgroup_dropdown) do
# May need to click again because it is possible to click the button quicker than the JS is bound
wait(reload: false) do
click_element :new_project_or_subgroup_dropdown_toggle
has_element?(kind)
has_element?(kind)
end
click_element kind
end
click_element kind
end
end
end

View File

@ -57,7 +57,7 @@ module QA
end
def go_to_profile_settings
with_retry(reload: false) do
retry_until(reload: false) do
within_user_menu do
click_link 'Settings'
end

View File

@ -23,7 +23,7 @@ module QA
check_element :new_user_accept_terms if has_element?(:new_user_accept_terms)
signed_in = with_retry do
signed_in = retry_until do
click_element :new_user_register_button
Page::Main::Menu.act { has_personal_area? }

View File

@ -80,7 +80,7 @@ module QA
# Retry the attempt to click :commit_button just in case part of the
# animation is still in process even when the buttons have the
# expected visibility.
commit_success_msg_shown = with_retry do
commit_success_msg_shown = retry_until do
click_element :commit_button
wait(reload: false) do