Commit 6fe56ac9 by Christina Roberts

Merge pull request #205 from edx/christina/advanced-settings-test

Sometimes the first click doesn't actually work, so call click up to 5 t...
parents a76b91b5 66439943
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
#pylint: disable=W0621 #pylint: disable=W0621
from lettuce import world, step from lettuce import world, step
from nose.tools import assert_false, assert_equal, assert_regexp_matches from nose.tools import assert_false, assert_equal, assert_regexp_matches, assert_true
from common import type_in_codemirror from common import type_in_codemirror
KEY_CSS = '.key input.policy-key' KEY_CSS = '.key input.policy-key'
...@@ -28,7 +28,14 @@ def i_am_on_advanced_course_settings(step): ...@@ -28,7 +28,14 @@ def i_am_on_advanced_course_settings(step):
@step(u'I press the "([^"]*)" notification button$') @step(u'I press the "([^"]*)" notification button$')
def press_the_notification_button(step, name): def press_the_notification_button(step, name):
css = 'a.%s-button' % name.lower() css = 'a.%s-button' % name.lower()
world.css_click(css)
# Save was clicked if either the save notification bar is gone, or we have a error notification
# overlaying it (expected in the case of typing Object into display_name).
save_clicked = lambda : world.is_css_not_present('.is-shown.wrapper-notification-warning') or \
world.is_css_present('.is-shown.wrapper-notification-error')
assert_true(world.css_click(css, success_condition=save_clicked),
'The save button was not clicked after 5 attempts.')
@step(u'I edit the value of a policy key$') @step(u'I edit the value of a policy key$')
......
...@@ -58,10 +58,16 @@ def css_find(css, wait_time=5): ...@@ -58,10 +58,16 @@ def css_find(css, wait_time=5):
@world.absorb @world.absorb
def css_click(css_selector, index=0, attempts=5): def css_click(css_selector, index=0, attempts=5, success_condition=lambda:True):
""" """
Perform a click on a CSS selector, retrying if it initially fails Perform a click on a CSS selector, retrying if it initially fails.
This function will return if the click worked (since it is try/excepting all errors)
This function handles errors that may be thrown if the component cannot be clicked on.
However, there are cases where an error may not be thrown, and yet the operation did not
actually succeed. For those cases, a success_condition lambda can be supplied to verify that the click worked.
This function will return True if the click worked (taking into account both errors and the optional
success_condition).
""" """
assert is_css_present(css_selector) assert is_css_present(css_selector)
attempt = 0 attempt = 0
...@@ -69,6 +75,7 @@ def css_click(css_selector, index=0, attempts=5): ...@@ -69,6 +75,7 @@ def css_click(css_selector, index=0, attempts=5):
while attempt < attempts: while attempt < attempts:
try: try:
world.css_find(css_selector)[index].click() world.css_find(css_selector)[index].click()
if success_condition():
result = True result = True
break break
except WebDriverException: except WebDriverException:
......
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