Commit cfe21a70 by Jesse Zoldak

Fix the helpers for Select objects by wrapping them in promises

parent d367f7ad
...@@ -21,6 +21,7 @@ from pymongo import MongoClient, ASCENDING ...@@ -21,6 +21,7 @@ from pymongo import MongoClient, ASCENDING
from openedx.core.lib.tests.assertions.events import assert_event_matches, is_matching_event, EventMatchTolerates from openedx.core.lib.tests.assertions.events import assert_event_matches, is_matching_event, EventMatchTolerates
from xmodule.partitions.partitions import UserPartition from xmodule.partitions.partitions import UserPartition
from xmodule.partitions.tests.test_partitions import MockUserPartitionScheme from xmodule.partitions.tests.test_partitions import MockUserPartitionScheme
from selenium.common.exceptions import StaleElementReferenceException
from selenium.webdriver.support.select import Select from selenium.webdriver.support.select import Select
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support import expected_conditions as EC
...@@ -201,18 +202,36 @@ def enable_css_animations(page): ...@@ -201,18 +202,36 @@ def enable_css_animations(page):
def select_option_by_text(select_browser_query, option_text): def select_option_by_text(select_browser_query, option_text):
""" """
Chooses an option within a select by text (helper method for Select's select_by_visible_text method). Chooses an option within a select by text (helper method for Select's select_by_visible_text method).
Wrap this in a Promise to prevent a StaleElementReferenceException
from being raised while the DOM is still being rewritten
""" """
select = Select(select_browser_query.first.results[0]) def select_option(query, value):
select.select_by_visible_text(option_text) try:
select = Select(query.first.results[0])
select.select_by_visible_text(value)
return True
except StaleElementReferenceException:
return False
EmptyPromise(lambda: select_option(select_browser_query, option_text), 'Selected option {}'.format(option_text)).fulfill()
def get_selected_option_text(select_browser_query): def get_selected_option_text(select_browser_query):
""" """
Returns the text value for the first selected option within a select. Returns the text value for the first selected option within a select.
Wrap this in a Promise to prevent a StaleElementReferenceException
from being raised while the DOM is still being rewritten
""" """
def get_option(query):
try:
select = Select(select_browser_query.first.results[0]) select = Select(select_browser_query.first.results[0])
return select.first_selected_option.text return (True, select.first_selected_option.text)
except StaleElementReferenceException:
return (False, None)
text = Promise(lambda: get_option(select_browser_query), 'Retrieved selected option text').fulfill()
return text
def get_options(select_browser_query): def get_options(select_browser_query):
""" """
......
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