Skip to content

Commit 15b1fff

Browse files
author
Brandon Duffany
committed
Add logged_in decorator
1 parent 475e6f3 commit 15b1fff

File tree

3 files changed

+37
-2
lines changed

3 files changed

+37
-2
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
.tox
22
*.pyc
3+
*.swp

codebender_testing/config.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,8 @@
77
"firefox": webdriver.Firefox,
88
"chrome": webdriver.Chrome
99
}
10+
11+
TEST_CREDENTIALS = {
12+
"username": "tester",
13+
"password": "testerPASS"
14+
}

codebender_testing/utils.py

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,13 @@
22
import sys
33

44
from selenium import webdriver
5+
from selenium.common.exceptions import NoSuchElementException
6+
from selenium.webdriver.common.keys import Keys
57
import pytest
68

7-
from codebender_testing.config import WEBDRIVERS
89
from codebender_testing.config import BASE_URL
10+
from codebender_testing.config import TEST_CREDENTIALS
11+
from codebender_testing.config import WEBDRIVERS
912

1013

1114
class SeleniumTestCase(object):
@@ -20,14 +23,40 @@ def setup(self, request):
2023
webdriver_cls = WEBDRIVERS[request.param]
2124
self.driver = webdriver_cls()
2225

23-
def open(self, url):
26+
def open(self, url=None):
2427
"""Open the resource specified by `url`.
2528
If an absolute URL is specified (like 'http://codebender.cc') we
2629
use that URL. Otherwise the resource is relative to `BASE_URL` in
2730
`codebender_testing.config`.
2831
"""
32+
if url is None:
33+
url = ''
2934
if re.match(".+?://^", url):
35+
# url specifies an absolute path.
3036
return self.driver.get(url)
3137
else:
3238
return self.driver.get("%s/%s" % (BASE_URL, url))
3339

40+
41+
def logged_in(func):
42+
"""Decorator to ensure the user is logged in before performing a test.
43+
If not logged in, a login will be performed."""
44+
def inner(*args, **kwargs):
45+
test = args[0]
46+
try:
47+
test.open()
48+
login_button = test.driver.find_element_by_id('login_btn')
49+
login_button.send_keys(Keys.ENTER)
50+
# Enter credentials and log in
51+
user_field = test.driver.find_element_by_id('username')
52+
user_field.send_keys(TEST_CREDENTIALS['username'])
53+
pass_field = test.driver.find_element_by_id('password')
54+
pass_field.send_keys(TEST_CREDENTIALS['password'])
55+
do_login = test.driver.find_element_by_id('_submit')
56+
do_login.send_keys(Keys.ENTER)
57+
except NoSuchElementException:
58+
# 'Log In' is not displayed, so we're already logged in.
59+
pass
60+
return func(*args, **kwargs)
61+
return inner
62+

0 commit comments

Comments
 (0)