From 51c7ca67f077c24e542789baf2cf3b3c5909dff0 Mon Sep 17 00:00:00 2001 From: Adam Palay Date: Thu, 20 Oct 2016 15:35:20 -0400 Subject: [PATCH] address flaky tests by adding time.sleep --- common/test/acceptance/pages/lms/teams.py | 8 ++--- .../test/acceptance/tests/lms/test_teams.py | 29 ++++++++++++++++++- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/common/test/acceptance/pages/lms/teams.py b/common/test/acceptance/pages/lms/teams.py index 2bf616622e..57bfaaeb9a 100644 --- a/common/test/acceptance/pages/lms/teams.py +++ b/common/test/acceptance/pages/lms/teams.py @@ -6,7 +6,7 @@ Teams pages. from common.test.acceptance.pages.lms.course_page import CoursePage from common.test.acceptance.pages.lms.discussion import InlineDiscussionPage from common.test.acceptance.pages.common.paging import PaginatedUIMixin -from common.test.acceptance.pages.common.utils import confirm_prompt +from common.test.acceptance.pages.common.utils import confirm_prompt, click_css from common.test.acceptance.pages.lms.fields import FieldsMixin @@ -502,11 +502,7 @@ class TeamPage(CoursePage, PaginatedUIMixin, BreadcrumbsMixin): def click_leave_team_link(self, remaining_members=0, cancel=False): """ Click on Leave Team link""" - self.wait_for( - lambda: self.team_leave_link_present, - description="Leave Team button did not become present" - ) - self.q(css='.leave-team-link').first.click() + click_css(self, '.leave-team-link', require_notification=False) confirm_prompt(self, cancel, require_notification=False) if cancel is False: diff --git a/common/test/acceptance/tests/lms/test_teams.py b/common/test/acceptance/tests/lms/test_teams.py index fec3e5a7f1..f09fefcb19 100644 --- a/common/test/acceptance/tests/lms/test_teams.py +++ b/common/test/acceptance/tests/lms/test_teams.py @@ -1042,8 +1042,21 @@ class CreateTeamTest(TeamFormActions): Then I should see the error message and highlighted fields. """ self.verify_and_navigate_to_create_team_page() - self.team_management_page.submit_form() + # `submit_form` clicks on a button, but that button doesn't always + # have the click event handler registered on it in time. That's why + # this test is flaky. Unfortunately, I don't know of a straightforward + # way to write something that waits for that event handler to be bound + # to the button element. So I used time.sleep as well, even though + # the bok choy docs explicitly ask us not to: + # http://bok-choy.readthedocs.io/en/latest/guidelines.html + # Sorry! For the story to address this anti-pattern, see TNL-5820 + time.sleep(0.5) + self.team_management_page.submit_form() + self.team_management_page.wait_for( + lambda: self.team_management_page.validation_message_text, + "Validation message text never loaded." + ) self.assertEqual( self.team_management_page.validation_message_text, 'Check the highlighted fields below and try again.' @@ -1150,6 +1163,13 @@ class CreateTeamTest(TeamFormActions): self.assertTrue(self.browse_teams_page.get_pagination_header_text().startswith('Showing 0 out of 0 total')) self.verify_and_navigate_to_create_team_page() + + # We add a sleep here to allow time for the click event handler to bind + # to the cancel button. Using time.sleep in bok-choy tests is, + # generally, an anti-pattern. So don't copy this :). + # For the story to address this anti-pattern, see TNL-5820 + time.sleep(0.5) + self.team_management_page.cancel_team() self.assertTrue(self.browse_teams_page.is_browser_on_page()) @@ -1941,6 +1961,13 @@ class TeamPageTest(TeamsTabBase): } ] with self.assert_events_match_during(event_filter=self.only_team_events, expected_events=expected_events): + # I think we're seeing the same problem that we're seeing in + # CreateTeamTest.test_user_can_see_error_message_for_missing_data. + # We click on the "leave team" link after it's loaded, but before + # its JavaScript event handler is added. Adding this sleep gives + # enough time for that event handler to bind to the link. Sorry! + # For the story to address this anti-pattern, see TNL-5820 + time.sleep(0.5) self.team_page.click_leave_team_link() self.assert_team_details(num_members=0, is_member=False) self.assertTrue(self.team_page.join_team_button_present)