Skip to content
Snippets Groups Projects
Verified Commit 46aa9d1a authored by Varac's avatar Varac
Browse files

Move common behave functions to oas_behave module

Closes: #291
parent da8e37a2
No related branches found
No related tags found
No related merge requests found
......@@ -16,3 +16,4 @@ setuptools>=40.6.2
wheel>=0.33.1
pytz>=2019.1
-e git+https://open.greenhost.net/greenhost/cloud-api#egg=greenhost_cloud
-e git+https://open.greenhost.net/openappstack/oas_behave#egg=oas_behave
"""Basic setup for behave using chrome(ium) or firefox."""
import behave_webdriver
import os
import re
import time
def save_screenshot(context, step):
"""Save a screenshot to ./screenshots."""
timestamp = time.strftime("%Y-%m-%dT%H:%M:%S")
filename = re.sub(r'\W', '-', '{} failed {}'.format(timestamp,
str(step.name)))
filepath = os.path.join('screenshots', filename + '.png')
if not os.path.exists('screenshots'):
os.mkdir('screenshots')
print('Saving screenshot to %s' % filepath)
context.behave_driver.save_screenshot(filepath)
def before_all(context):
"""Run at the very beginning."""
def setup_chrome():
from behave_webdriver.driver import ChromeOptions
chrome_options = ChromeOptions()
if headless == 'True':
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
context.behave_driver = behave_webdriver.Chrome(
chrome_options=chrome_options)
def setup_firefox():
from behave_webdriver.driver import FirefoxOptions
firefox_options = FirefoxOptions()
if headless == 'True':
firefox_options.add_argument('--headless')
context.behave_driver = behave_webdriver.Firefox(
firefox_options=firefox_options,
service_log_path='/tmp/firefox.log')
userdata = context.config.userdata
headless = userdata.get('headless', 'False')
browser = userdata.get('browser', 'chrome')
if browser == 'chrome':
setup_chrome()
elif browser == 'firefox':
setup_firefox()
def before_tag(context, tag):
"""Define steps run before each tag."""
def get_values(app):
values = {}
values['url'] = userdata.get(app + '.url')
values['username'] = \
userdata.get(app + '.username', 'admin')
values['password'] = \
userdata.get(app + '.password')
assert values['url'], '{0}.url variable missing in' \
'userdata. Provide it with "-D {0}.url".'.format(app)
assert values['username'], '{0}.username variable missing in' \
'userdata. Provide it with "-D {0}.username".'.format(app)
assert values['password'], '{0}.password variable missing in' \
'userdata. Provide it with "-D {0}.password".'.format(app)
return(values)
userdata = context.config.userdata
if tag == 'grafana':
context.grafana = get_values('grafana')
if tag == 'nextcloud':
context.nextcloud = get_values('nextcloud')
def after_all(context):
"""Cleanup after tests run."""
context.behave_driver.quit()
def after_step(context, step):
"""Save screeshot if step fails."""
if step.status == 'failed':
save_screenshot(context, step)
print("Console log output:")
for message in context.behave_driver.get_log('browser'):
print(" Level: {}".format(message['level']))
print(" Timestamp: {}".format(message['timestamp']))
print(" Source: {}".format(message['source']))
print(" Message: {}\n".format(message['message']))
"""Custom steps for login tests."""
import random
import string
from behave import given, when
from behave_webdriver.steps import *
def before_all(context):
pass # login and save cookies here
@when(u'I open the onlyoffice URL')
@given(u'I open the onlyoffice URL')
def step_impl(context):
"""Open onlyoffice URL."""
print(context.nextcloud)
context.behave_driver.get(context.config.userdata.get('onlyoffice.url'))
@when(u'I open the nextcloud URL')
@given(u'I open the nextcloud URL')
def step_impl(context):
"""Open nextcloud URL."""
context.behave_driver.get(context.nextcloud['url'])
@when(u'I open the grafana URL')
@given(u'I open the grafana URL')
def step_impl(context):
"""Open grafana URL."""
context.behave_driver.get(context.grafana['url'])
@when(u'I enter the "{section}" "{cred_type}" in the inputfield "{element}"')
def step_impl(context, section, cred_type, element):
"""Enter username/password into login inputfields."""
elem = context.behave_driver.get_element(element)
elem.clear()
context_section = getattr(context, section)
value = context_section[cred_type]
elem.send_keys(value)
@when(u'I add a random string to the inputfield "{element}"')
def step_impl(context, element):
"""Add a random string of 20 characters to the specified input field"""
random_string = ''.join(random.choices(string.ascii_letters, k=20))
context.execute_steps(
'When I add "{}" to the inputfield "{}"'.format(
random_string, element))
@when(u'I close the nextcloud welcome wizard if it exists')
def step_impl(context):
"""Checks if the #firstrunwizard element exists and closes it if so"""
if context.behave_driver.element_exists("#firstrunwizard"):
context.execute_steps(
'When I click on the element "a.close.icon-close"')
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment