diff options
| author | Tulio Casagrande <tcasagra@thoughtworks.com> | 2016-12-14 14:49:23 -0200 | 
|---|---|---|
| committer | Tulio Casagrande <tcasagra@thoughtworks.com> | 2016-12-14 14:57:49 -0200 | 
| commit | 66a01bde2bd8c54fd830ff94443fc860a549bc3c (patch) | |
| tree | 83cb8dd4a6f93f50356b8fb7732f1a4a2ae62c93 /service | |
| parent | d14cfaa1f970b623c52f0f892980057c4c81308c (diff) | |
Move functional tests to find elements with waits
We were using the Selenium native find_element in a few places, which
could raise a TimeoutException. I changed to use our timed out version
and also renamed the internal methods to prevent misuse
Diffstat (limited to 'service')
| -rw-r--r-- | service/test/functional/features/steps/attachments.py | 12 | ||||
| -rw-r--r-- | service/test/functional/features/steps/common.py | 21 | ||||
| -rw-r--r-- | service/test/functional/features/steps/compose.py | 11 | ||||
| -rw-r--r-- | service/test/functional/features/steps/mail_list.py | 6 | ||||
| -rw-r--r-- | service/test/functional/features/steps/mail_view.py | 12 | ||||
| -rw-r--r-- | service/test/functional/features/steps/tag_list.py | 11 | 
6 files changed, 29 insertions, 44 deletions
| diff --git a/service/test/functional/features/steps/attachments.py b/service/test/functional/features/steps/attachments.py index 43948016..8852b787 100644 --- a/service/test/functional/features/steps/attachments.py +++ b/service/test/functional/features/steps/attachments.py @@ -20,14 +20,12 @@ from uuid import uuid4  from behave import given, then, when  from crochet import wait_for -from selenium.webdriver.common.by import By  from common import (      fill_by_css_selector,      find_element_by_css_selector,      find_elements_by_css_selector, -    page_has_css, -    wait_until_element_is_visible_by_locator) +    page_has_css)  @given(u'I have a mail with an attachment in my inbox') @@ -71,7 +69,7 @@ def upload_big_file(context):      fname = "over_5mb.data"      context.browser.execute_script("$('#fileupload').removeAttr('hidden');")      fill_by_css_selector(context, '#fileupload', base_dir + fname) -    wait_until_element_is_visible_by_locator(context, (By.CSS_SELECTOR, '#upload-error-message')) +    find_element_by_css_selector(context, '#upload-error-message')  @then(u'I see an upload error message') @@ -100,17 +98,17 @@ def upload_attachment(context):      base_dir = "test/functional/features/files/"      fname = "5mb.data"      fill_by_css_selector(context, '#fileupload', base_dir + fname) -    attachment_list_item = wait_until_element_is_visible_by_locator(context, (By.CSS_SELECTOR, '#attachment-list-item li a')) +    attachment_list_item = find_element_by_css_selector(context, '#attachment-list-item li a')      assert attachment_list_item.text == "%s (5.00 Mb)" % fname  @when(u'remove the file')  def click_remove_icon(context): -    remove_icon = wait_until_element_is_visible_by_locator(context, (By.CSS_SELECTOR, '#attachment-list-item i.remove-icon')) +    remove_icon = find_element_by_css_selector(context, '#attachment-list-item i.remove-icon')      remove_icon.click()  @then(u'I should not see it attached')  def assert_attachment_removed(context): -    attachments_list_li = context.browser.find_elements(By.CSS_SELECTOR, '#attachment-list-item li a') +    attachments_list_li = context.browser.find_elements_by_css_selector('#attachment-list-item li a')      assert len(attachments_list_li) == 0 diff --git a/service/test/functional/features/steps/common.py b/service/test/functional/features/steps/common.py index f21e9410..edfe2a50 100644 --- a/service/test/functional/features/steps/common.py +++ b/service/test/functional/features/steps/common.py @@ -45,11 +45,6 @@ def wait_until_element_is_invisible_by_locator(context, locator_tuple, timeout=T      wait.until(EC.invisibility_of_element_located(locator_tuple)) -def wait_until_element_is_deleted(context, locator_tuple, timeout=TIMEOUT_IN_S): -    wait = WebDriverWait(context.browser, timeout) -    wait.until(lambda s: len(s.find_elements(locator_tuple[0], locator_tuple[1])) == 0) - -  def wait_for_loading_to_finish(context, timeout=TIMEOUT_IN_S):      wait_until_element_is_invisible_by_locator(context, (By.ID, 'loading'), timeout) @@ -58,13 +53,13 @@ def wait_for_user_alert_to_disapear(context, timeout=TIMEOUT_IN_S):      wait_until_element_is_invisible_by_locator(context, (By.ID, 'user-alerts'), timeout) -def wait_until_elements_are_visible_by_locator(context, locator_tuple, timeout=TIMEOUT_IN_S): +def _wait_until_elements_are_visible_by_locator(context, locator_tuple, timeout=TIMEOUT_IN_S):      wait = WebDriverWait(context.browser, timeout)      wait.until(EC.presence_of_all_elements_located(locator_tuple))      return context.browser.find_elements(locator_tuple[0], locator_tuple[1]) -def wait_until_element_is_visible_by_locator(context, locator_tuple, timeout=TIMEOUT_IN_S): +def _wait_until_element_is_visible_by_locator(context, locator_tuple, timeout=TIMEOUT_IN_S):      wait = WebDriverWait(context.browser, timeout)      wait.until(EC.presence_of_element_located(locator_tuple))      return context.browser.find_element(locator_tuple[0], locator_tuple[1]) @@ -98,27 +93,27 @@ def page_has_css(context, css):  def find_element_by_xpath(context, xpath): -    return wait_until_element_is_visible_by_locator(context, (By.XPATH, xpath)) +    return _wait_until_element_is_visible_by_locator(context, (By.XPATH, xpath))  def find_element_by_id(context, id): -    return wait_until_element_is_visible_by_locator(context, (By.ID, id)) +    return _wait_until_element_is_visible_by_locator(context, (By.ID, id))  def find_element_by_css_selector(context, css_selector, timeout=TIMEOUT_IN_S): -    return wait_until_element_is_visible_by_locator(context, (By.CSS_SELECTOR, css_selector), timeout=timeout) +    return _wait_until_element_is_visible_by_locator(context, (By.CSS_SELECTOR, css_selector), timeout=timeout)  def find_element_by_class_name(context, class_name): -    return wait_until_element_is_visible_by_locator(context, (By.CLASS_NAME, class_name)) +    return _wait_until_element_is_visible_by_locator(context, (By.CLASS_NAME, class_name))  def find_elements_by_css_selector(context, css_selector, timeout=TIMEOUT_IN_S): -    return wait_until_elements_are_visible_by_locator(context, (By.CSS_SELECTOR, css_selector), timeout=timeout) +    return _wait_until_elements_are_visible_by_locator(context, (By.CSS_SELECTOR, css_selector), timeout=timeout)  def find_elements_by_xpath(context, xpath, timeout=TIMEOUT_IN_S): -    return wait_until_elements_are_visible_by_locator(context, (By.XPATH, xpath), timeout=timeout) +    return _wait_until_elements_are_visible_by_locator(context, (By.XPATH, xpath), timeout=timeout)  def find_element_containing_text(context, text, element_type='*'): diff --git a/service/test/functional/features/steps/compose.py b/service/test/functional/features/steps/compose.py index c72b25e2..1dab1b6d 100644 --- a/service/test/functional/features/steps/compose.py +++ b/service/test/functional/features/steps/compose.py @@ -16,17 +16,15 @@  from time import sleep  from behave import when -from selenium.webdriver.common.by import By  from common import (      fill_by_css_selector, -    wait_until_element_is_visible_by_locator,      find_element_by_css_selector)  @when('I compose a message with')  def impl(context): -    toggle = context.browser.find_element_by_id('compose-mails-trigger') +    toggle = find_element_by_css_selector(context, '#compose-mails-trigger')      toggle.click()      for row in context.table: @@ -48,18 +46,17 @@ def choose_impl(context, recipients_field, to_type):  @when('I send it')  def send_impl(context): -    send_button = wait_until_element_is_visible_by_locator(context, (By.CSS_SELECTOR, '#send-button:enabled')) +    send_button = find_element_by_css_selector(context, '#send-button:enabled')      send_button.click()  @when(u'I toggle the cc and bcc fields')  def collapse_cc_bcc_fields(context): -    cc_and_bcc_chevron = wait_until_element_is_visible_by_locator(context, (By.CSS_SELECTOR, '#cc-bcc-collapse')) +    cc_and_bcc_chevron = find_element_by_css_selector(context, '#cc-bcc-collapse')      cc_and_bcc_chevron.click()  def _enter_recipient(context, recipients_field, to_type):      recipients_field = recipients_field.lower() -    browser = context.browser -    field = browser.find_element_by_css_selector('#recipients-%s-area .tt-input' % recipients_field) +    field = find_element_by_css_selector(context, '#recipients-%s-area .tt-input' % recipients_field)      field.send_keys(to_type) diff --git a/service/test/functional/features/steps/mail_list.py b/service/test/functional/features/steps/mail_list.py index 9432a4d1..227aa9ed 100644 --- a/service/test/functional/features/steps/mail_list.py +++ b/service/test/functional/features/steps/mail_list.py @@ -16,7 +16,6 @@  from behave import when, then, given  from selenium.common.exceptions import TimeoutException -from selenium.webdriver.common.by import By  from common import (      ImplicitWait, @@ -26,8 +25,7 @@ from common import (      find_elements_by_css_selector,      mail_list_with_subject_exists,      wait_for_condition, -    wait_for_loading_to_finish, -    wait_until_elements_are_visible_by_locator) +    wait_for_loading_to_finish)  def find_current_mail(context): @@ -45,7 +43,7 @@ def open_current_mail(context):  def get_first_email(context): -    return wait_until_elements_are_visible_by_locator(context, (By.CSS_SELECTOR, '.mail-list-entry__item'))[0] +    return find_element_by_css_selector(context, '.mail-list-entry__item')  @then('I see that mail under the \'{tag}\' tag') diff --git a/service/test/functional/features/steps/mail_view.py b/service/test/functional/features/steps/mail_view.py index 88ee5c5a..65959b70 100644 --- a/service/test/functional/features/steps/mail_view.py +++ b/service/test/functional/features/steps/mail_view.py @@ -16,15 +16,13 @@  from behave import then, when  from selenium.webdriver.common.keys import Keys -from selenium.webdriver.common.by import By  from common import (      click_button,      find_element_by_css_selector,      find_elements_by_css_selector,      reply_subject, -    wait_until_button_is_visible, -    wait_until_element_is_visible_by_locator) +    wait_until_button_is_visible)  @then('I see that the subject reads \'{subject}\'') @@ -44,7 +42,7 @@ def impl(context, expected_body):  @then('that email has the \'{tag}\' tag')  def impl(context, tag): -    wait_until_element_is_visible_by_locator(context, (By.CSS_SELECTOR, '#mail-view .tagsArea .tag')) +    find_element_by_css_selector(context, '#mail-view .tagsArea .tag')      elements = find_elements_by_css_selector(context, '#mail-view .tagsArea .tag')      tags = [e.text for e in elements]      assert tag in tags @@ -52,13 +50,13 @@ def impl(context, tag):  @when('I add the tag \'{tag}\' to that mail')  def impl(context, tag): -    b = wait_until_element_is_visible_by_locator(context, (By.ID, 'new-tag-button')) +    b = find_element_by_css_selector(context, '#new-tag-button')      b.click() -    e = wait_until_element_is_visible_by_locator(context, (By.ID, 'new-tag-input')) +    e = find_element_by_css_selector(context, '#new-tag-input')      e.send_keys(tag)      e.send_keys(Keys.ENTER) -    wait_until_element_is_visible_by_locator(context, (By.CSS_SELECTOR, 'li[data-tag=%s]' % tag)) +    find_element_by_css_selector(context, 'li[data-tag=%s]' % tag)  @when('I reply to it') diff --git a/service/test/functional/features/steps/tag_list.py b/service/test/functional/features/steps/tag_list.py index b9adea0a..daea416d 100644 --- a/service/test/functional/features/steps/tag_list.py +++ b/service/test/functional/features/steps/tag_list.py @@ -15,13 +15,12 @@  # along with Pixelated. If not, see <http://www.gnu.org/licenses/>.  from behave import when  from selenium.common.exceptions import TimeoutException -from selenium.webdriver.common.by import By  from common import (      find_element_by_class_name,      find_element_by_id, -    wait_for_user_alert_to_disapear, -    wait_until_element_is_visible_by_locator) +    find_element_by_css_selector, +    wait_for_user_alert_to_disapear)  def click_first_element_with_class(context, classname): @@ -52,12 +51,12 @@ def impl(context, tag):      success = False      while (not success) and (try_again > 0):          try: -            wait_until_element_is_visible_by_locator(context, (By.ID, 'tag-%s' % tag), timeout=20) +            find_element_by_css_selector(context, '#tag-%s' % tag)              e = find_element_by_id(context, 'tag-%s' % tag)              e.click() -            wait_until_element_is_visible_by_locator(context, (By.CSS_SELECTOR, ".mail-list-entry__item[href*='%s']" % tag), timeout=20) +            find_element_by_css_selector(context, ".mail-list-entry__item[href*='%s']" % tag)              success = True          except TimeoutException:              pass @@ -71,6 +70,6 @@ def impl(context, tag):  def impl(context, tag):      expand_side_nav(context) -    wait_until_element_is_visible_by_locator(context, (By.ID, 'tag-%s' % tag), 20) +    find_element_by_css_selector(context, '#tag-%s' % tag)      e = find_element_by_id(context, 'tag-%s' % tag)      assert "selected" in e.get_attribute("class") | 
