Commit 30d71ccf authored by Sanad Liaquat's avatar Sanad Liaquat

Merge branch '55972-fix-commit-changes-wait-qa' into 'master'

Wait for Web IDE commit animation

Closes #55972

See merge request gitlab-org/gitlab-ce!24196
parents 4aaea7b3 8299df75
......@@ -116,6 +116,14 @@ module QA
has_css?(element_selector_css(name), wait: wait)
end
def has_no_element?(name, wait: Capybara.default_max_wait_time)
has_no_css?(element_selector_css(name), wait: wait)
end
def has_text?(text)
page.has_text? text
end
def has_no_text?(text)
page.has_no_text? text
end
......
......@@ -66,11 +66,29 @@ module QA
def commit_changes
click_element :begin_commit_button
# After clicking :begin_commit_button there is an animation that
# hides :begin_commit_button and shows :commit_button
#
# Wait for the animation to complete before clicking :commit_button
# otherwise the click will quietly do nothing.
wait(reload: false) do
has_no_element?(:begin_commit_button) &&
has_element?(:commit_button)
end
# 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
click_element :commit_button
wait(reload: false) do
page.has_content?('Your changes have been committed')
has_text?('Your changes have been committed')
end
end
raise "The changes do not appear to have been committed successfully." unless commit_success_msg_shown
end
end
end
......
......@@ -88,6 +88,22 @@ module QA
found
end
def has_no_element?(name, wait: Capybara.default_max_wait_time)
found = super
log("has_no_element? :#{name} returned #{found}")
found
end
def has_text?(text)
found = super
log(%Q{has_text?('#{text}') returned #{found}})
found
end
def has_no_text?(text)
found = super
......
......@@ -74,6 +74,20 @@ describe QA::Support::Page::Logging do
.to output(/has_element\? :element returned true/).to_stdout_from_any_process
end
it 'logs has_no_element?' do
allow(page).to receive(:has_no_css?).and_return(true)
expect { subject.has_no_element?(:element) }
.to output(/has_no_element\? :element returned true/).to_stdout_from_any_process
end
it 'logs has_text?' do
allow(page).to receive(:has_text?).and_return(true)
expect { subject.has_text? 'foo' }
.to output(/has_text\?\('foo'\) returned true/).to_stdout_from_any_process
end
it 'logs has_no_text?' do
allow(page).to receive(:has_no_text?).with('foo').and_return(true)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment