Various stylistic and pylint fixes / changes

Version numbers have very different ranges for different browsers so not having a dictionary of those.

Fixed a whitespace issue

Fixed pylint/pep8 violations

Don't need django_url

Spacing issues

Changed how commenting works

Forgot one

Used wrong name

Changed around importing

Remove django_url

Fixed function orderingn

Made logic nicer for getting a new browser

Modifying tests to run in opera

Needed to increase time to account for slow sauce loading

Now safari LMS works

Forgot an assert statement

Skipping a few tests for opera
This commit is contained in:
JonahStanley
2013-08-19 09:08:02 -04:00
parent bb7cbf4d62
commit 21f75ff250
12 changed files with 93 additions and 78 deletions

View File

@@ -12,6 +12,9 @@ from django.core.management import call_command
from django.conf import settings
from selenium.common.exceptions import WebDriverException
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from requests import put
from base64 import encodestring
from json import dumps
# Let the LMS and CMS do their one-time setup
# For example, setting up mongo caches
@@ -42,27 +45,32 @@ LOGGER.info("Loading the lettuce acceptance testing terrain file...")
MAX_VALID_BROWSER_ATTEMPTS = 20
# https://gist.github.com/santiycr/1644439
import requests
import base64
try:
import json
except ImportError:
import simplejson as json
def get_username_and_key():
"""
Returns the Sauce Labs username and access ID as set by environment variables
"""
return {"username": settings.SAUCE.get('USERNAME'), "access-key": settings.SAUCE.get('ACCESS_ID')}
def set_job_status(jobid, passed=True):
body_content = json.dumps({"passed": passed})
"""
Sets the job status on sauce labs
"""
body_content = dumps({"passed": passed})
config = get_username_and_key()
base64string = base64.encodestring('{}:{}'.format(config['username'], config['access-key']))[:-1]
result = requests.put('http://saucelabs.com/rest/v1/{}/jobs/{}'.format(config['username'], world.jobid),
base64string = encodestring('{}:{}'.format(config['username'], config['access-key']))[:-1]
result = put('http://saucelabs.com/rest/v1/{}/jobs/{}'.format(config['username'], world.jobid),
data=body_content,
headers={"Authorization": "Basic {}".format(base64string)})
return result.status_code == 200
def make_desired_capabilities():
desired_capabilities = settings.SAUCE.get('BROWSER', DesiredCapabilities.CHROME)
"""
Returns a DesiredCapabilities object corresponding to the environment sauce parameters
"""
desired_capabilities = settings.SAUCE.get('BROWSER', DesiredCapabilities.CHROME)
desired_capabilities['platform'] = settings.SAUCE.get('PLATFORM')
desired_capabilities['version'] = settings.SAUCE.get('VERSION')
desired_capabilities['device-type'] = settings.SAUCE.get('DEVICE')
@@ -77,60 +85,54 @@ def make_desired_capabilities():
return desired_capabilities
def get_username_and_key():
return {"username": settings.SAUCE.get('USERNAME'), "access-key": settings.SAUCE.get('ACCESS_ID')}
@before.harvest
def initial_setup(server):
"""
Launch the browser once before executing the tests.
"""
world.absorb(settings.SAUCE.get('SAUCE_ENABLED'),'SAUCE_ENABLED')
browser_driver = getattr(settings, 'LETTUCE_BROWSER', 'chrome')
world.absorb(settings.SAUCE.get('SAUCE_ENABLED'), 'SAUCE_ENABLED')
# There is an issue with ChromeDriver2 r195627 on Ubuntu
# in which we sometimes get an invalid browser session.
# This is a work-around to ensure that we get a valid session.
success = False
num_attempts = 0
while (not success) and num_attempts < MAX_VALID_BROWSER_ATTEMPTS:
if not world.SAUCE_ENABLED:
browser_driver = getattr(settings, 'LETTUCE_BROWSER', 'chrome')
# Get a browser session
if world.SAUCE_ENABLED:
config = get_username_and_key()
world.browser = Browser(
'remote',
url="http://{}:{}@ondemand.saucelabs.com:80/wd/hub".format(config['username'], config['access-key']),
**make_desired_capabilities()
)
world.absorb(world.browser.driver.session_id, 'jobid')
else:
# There is an issue with ChromeDriver2 r195627 on Ubuntu
# in which we sometimes get an invalid browser session.
# This is a work-around to ensure that we get a valid session.
success = False
num_attempts = 0
while (not success) and num_attempts < MAX_VALID_BROWSER_ATTEMPTS:
world.browser = Browser(browser_driver)
# Try to visit the main page
# If the browser session is invalid, this will
# raise a WebDriverException
try:
world.visit('/')
except WebDriverException:
world.browser.quit()
num_attempts += 1
else:
success = True
# If we were unable to get a valid session within the limit of attempts,
# then we cannot run the tests.
if not success:
raise IOError("Could not acquire valid {driver} browser session.".format(driver='remote'))
world.browser.driver.set_window_size(1280, 1024)
else:
config = get_username_and_key()
world.browser = Browser(
'remote',
url="http://{}:{}@ondemand.saucelabs.com:80/wd/hub".format(config['username'], config['access-key']),
**make_desired_capabilities()
)
world.browser.driver.implicitly_wait(30)
# Try to visit the main page
# If the browser session is invalid, this will
# raise a WebDriverException
try:
world.visit('/')
except WebDriverException:
world.browser.quit()
num_attempts += 1
else:
success = True
# If we were unable to get a valid session within the limit of attempts,
# then we cannot run the tests.
if not success:
raise IOError("Could not acquire valid {driver} browser session.".format(driver='remote'))
# Set the browser size to 1280x1024
if not world.SAUCE_ENABLED:
world.browser.driver.set_window_size(1280, 1024)
world.absorb(world.browser.driver.session_id, 'jobid')
@before.each_scenario

View File

@@ -99,7 +99,7 @@ def i_am_logged_in_user(step):
@step('I am not logged in$')
def i_am_not_logged_in(step):
world.visit(django_url('logout'))
world.visit('logout')
@step('I am staff for course "([^"]*)"$')
@@ -138,10 +138,13 @@ def should_have_link_with_path_and_text(step, path, text):
@step(r'should( not)? see "(.*)" (?:somewhere|anywhere) (?:in|on) (?:the|this) page')
def should_see_in_the_page(step, doesnt_appear, text):
multiplier = 1
if world.SAUCE_ENABLED:
multiplier = 2
if doesnt_appear:
assert world.browser.is_text_not_present(text, wait_time=5)
assert world.browser.is_text_not_present(text, wait_time=5*multiplier)
else:
assert world.browser.is_text_present(text, wait_time=5)
assert world.browser.is_text_present(text, wait_time=5*multiplier)
@step('I am logged in$')
@@ -150,7 +153,7 @@ def i_am_logged_in(step):
world.log_in(username='robot', password='test')
world.browser.visit(django_url('/'))
# You should not see the login link
world.is_css_not_present('a#login')
assert world.is_css_not_present('a#login')
@step(u'I am an edX user$')