Wait for Web IDE commit animation
Wait for the "Commit..." button to disappear and the "Stage & Commit" button to appear before clicking the latter button. The animation that is shown while changing the buttons must complete before clicking "Stage & Commit" will have any effect _even if_ the button is visible before the animation is complete.
This commit is contained in:
parent
0c1d6be13c
commit
8299df7593
4 changed files with 58 additions and 2 deletions
|
@ -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
|
||||
click_element :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
|
||||
page.has_content?('Your changes have been committed')
|
||||
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
|
||||
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)
|
||||
|
||||
|
|
Loading…
Reference in a new issue