Skip to content

Commit e3e6ad7

Browse files
author
Brandon Duffany
committed
Fix flaky test_home.py
1 parent edff792 commit e3e6ad7

File tree

3 files changed

+30
-32
lines changed

3 files changed

+30
-32
lines changed

codebender_testing/config.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ def _rel_path(*args):
3838
# Directory in which the local compile tester files are stored.
3939
COMPILE_TESTER_DIR = os.path.join(TEST_DATA_DIR, 'cb_compile_tester')
4040

41-
# Set up Selenium Webdrivers to be used for selenium tests
4241

42+
# Set up Selenium Webdrivers to be used for selenium tests
4343
def _get_firefox_profile():
4444
"""Returns the Firefox profile to be used for the FF webdriver.
4545
Specifically, we're equipping the webdriver with the Codebender
@@ -59,7 +59,7 @@ def _get_firefox_profile():
5959
# module is imported (hence the need for lazy evaluation).
6060
WEBDRIVERS = {
6161
"firefox": lambda: webdriver.Firefox(firefox_profile=_get_firefox_profile()),
62-
# "chrome": lambda: webdriver.Chrome()
62+
# "chrome": lambda: webdriver.Chrome()
6363
}
6464

6565
# Credentials to use when logging into the site via selenium

codebender_testing/utils.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,15 @@ def login(self):
203203
# 'Log In' is not displayed, so we're already logged in.
204204
pass
205205

206+
def logout(self):
207+
"""Logs out of the site."""
208+
try:
209+
logout_button = self.driver.find_element_by_id("logout")
210+
logout_button.send_keys(Keys.ENTER)
211+
except NoSuchElementException:
212+
# 'Log out' is not displayed, so we're already logged out.
213+
pass
214+
206215
def get_element(self, *locator):
207216
"""Waits for an element specified by *locator (a tuple of
208217
(By.<something>, str)), then returns it if it is found."""
@@ -217,11 +226,11 @@ def get_elements(self, *locator):
217226
expected_conditions.visibility_of_all_elements_located_by(locator))
218227
return self.driver.find_elements(*locator)
219228

220-
def get(self, selector):
229+
def find(self, selector):
221230
"""Alias for `self.get_element(By.CSS_SELECTOR, selector)`."""
222231
return self.get_element(By.CSS_SELECTOR, selector)
223232

224-
def get_all(self, selector):
233+
def find_all(self, selector):
225234
"""Alias for `self.get_elements(By.CSS_SELECTOR, selector)`."""
226235
return self.get_elements(By.CSS_SELECTOR, selector)
227236

@@ -340,6 +349,10 @@ def _testcase_attrs(cls, webdriver, testing_url, testing_full):
340349
def tester_login(self):
341350
self.login()
342351

352+
@pytest.fixture(scope="class")
353+
def tester_logout(self):
354+
self.logout()
355+
343356

344357
class VerificationError(Exception):
345358
"""An exception representing a failed verification of a sketch."""

tests/home/test_home.py

Lines changed: 13 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -4,49 +4,49 @@
44

55
class TestHome(SeleniumTestCase):
66

7-
def test_navigate_home(self):
7+
def test_navigate_home(self, tester_logout):
88
""" opens browser to codebender bachelor """
99
self.open("/")
1010
assert "Codebender" in self.driver.title
1111

12-
def test_login(self):
12+
def test_login(self, tester_logout):
1313
driver = self.driver
1414
self.open("/")
1515

16-
""" tests to ensure login div appears """
16+
""" tests to ensure login div appears """
1717
login_elem = driver.find_element_by_id("login_btn") #finds login button
1818
login_elem.send_keys(Keys.RETURN) #clicks login button
1919
logbox_elem = driver.find_element_by_id("login_box") #finds login div
2020
assert logbox_elem.is_displayed() #checks to see if div is visible
2121

2222
""" tests login with invalid username """
23-
# define elements in login form
23+
# define elements in login form
2424
username_elem = driver.find_element_by_id("username")
2525
password_elem = driver.find_element_by_id("password")
2626
submit_elem = driver.find_element_by_id("_submit")
27-
27+
2828
# enter invalid username with correct password
2929
username_elem.send_keys("codebender")
3030
password_elem.send_keys(TEST_CREDENTIALS['password'])
3131
submit_elem.click()
3232

3333
# check for error message
3434
error_elem = driver.find_element_by_class_name('text-error')
35-
assert error_elem.is_displayed()
35+
assert error_elem.is_displayed()
3636

3737
""" tests login with invalid password """
3838
# refresh page so error message no longer visible
3939
driver.refresh()
4040

4141
# re-click on login button
4242
login_elem = driver.find_element_by_id("login_btn")
43-
login_elem.send_keys(Keys.RETURN)
44-
45-
# re-define elements in login form
43+
login_elem.send_keys(Keys.RETURN)
44+
45+
# re-define elements in login form
4646
username_elem = driver.find_element_by_id("username")
4747
password_elem = driver.find_element_by_id("password")
4848
submit_elem = driver.find_element_by_id("_submit")
49-
49+
5050
# enter correct username with invalid password
5151
username_elem.clear()
5252
username_elem.send_keys(TEST_CREDENTIALS['username'])
@@ -63,9 +63,9 @@ def test_login(self):
6363

6464
# re-click on login button
6565
login_elem = driver.find_element_by_id("login_btn")
66-
login_elem.send_keys(Keys.RETURN)
67-
68-
# re-define elements in login form
66+
login_elem.send_keys(Keys.RETURN)
67+
68+
# re-define elements in login form
6969
username_elem = driver.find_element_by_id("username")
7070
password_elem = driver.find_element_by_id("password")
7171
submit_elem = driver.find_element_by_id("_submit")
@@ -77,18 +77,3 @@ def test_login(self):
7777
submit_elem.click()
7878
assert "Logged in as" in driver.page_source
7979

80-
def test_quit(self):
81-
""" closes driver """
82-
driver = self.driver
83-
#driver.quit()
84-
85-
86-
87-
88-
89-
90-
91-
92-
93-
94-

0 commit comments

Comments
 (0)