from webdriver_test_tools.testcase.browsers import *
[docs]class BrowserConfig:
"""Configurations for which browsers to generate tests for"""
#: Dictionary mapping browser names to a boolean. True enables the browser,
#: False disables it. Defaults to Chrome and Firefox since they're not
#: platform specific
ENABLED_BROWSERS = {
Browsers.FIREFOX: True,
Browsers.CHROME: True,
Browsers.SAFARI: False,
Browsers.IE: False,
Browsers.EDGE: False,
Browsers.CHROME_MOBILE: False,
}
[docs] @classmethod
def get_browser_classes(cls, browser_names=None):
"""Get a list of enabled browser classes
:param browser_names: (Optional) List of browser names to get classes
for
:return: List of enabled browser test case classes
"""
if browser_names is None:
browser_names = cls.ENABLED_BROWSERS.keys()
else:
# Use only valid browser names
browser_names = [
browser_name for browser_name in browser_names
if browser_name in cls.ENABLED_BROWSERS.keys()
]
browser_classes = [
browser_class for short_name, browser_class in Browsers.TEST_CLASSES.items()
if short_name in browser_names and cls.ENABLED_BROWSERS[short_name]
]
return browser_classes
[docs] @classmethod
def get_browser_names(cls):
"""Returns a list of short names for enabled browser classes
:return: List of short names for enabled browser test case classes
"""
return [
browser_name for browser_name, is_enabled in cls.ENABLED_BROWSERS.items()
if is_enabled
]
[docs]class BrowserStackConfig(BrowserConfig):
"""Global configurations for BrowserStack testing"""
#: Set to True to enable BrowserStack testing
ENABLE = False
#: Account username. Projects will need to override this
USERNAME = None
#: Access key. Projects will need to override this
ACCESS_KEY = None
#: BrowserStack test configurations.
#: `Capabilities reference
#: <https://www.browserstack.com/automate/capabilities>`__
BS_CAPABILITIES = {
'project': None,
'browserstack.video': False,
}
# Methods
[docs] @classmethod
def get_command_executor(cls):
"""Returns the command executor URL
:return: Command executor URL formatted with :attr:`USERNAME` and
:attr:`ACCESS_KEY`
"""
if not cls.USERNAME or not cls.ACCESS_KEY:
raise Exception('USERNAME or ACCESS_KEY not set in BrowserStackConfig')
url_format = 'http://{USERNAME}:{ACCESS_KEY}@hub.browserstack.com:80/wd/hub'
command_executor = url_format.format(USERNAME=cls.USERNAME, ACCESS_KEY=cls.ACCESS_KEY)
return command_executor
[docs] @classmethod
def add_browserstack_capabilities(cls, desired_capabilities):
"""Update a desired capabilities dictionary to include items from
:attr:`BS_CAPABILITIES`
:param desired_capabilities: Desired capabilities dictionary to update
"""
desired_capabilities.update(cls.BS_CAPABILITIES)
[docs] @classmethod
def update_configurations(cls, **capabilities):
"""Update BrowserStack configurations at runtime
:param \**capabilities: Keyword arguments for BrowserStack
configurations. Possible arguments include:
- ``build`` (string) - Name for the group of tests
- ``video`` (boolean) - True to enable video recording, False
to disable it
"""
caps_map = {
'build': 'build',
'video': 'browserstack.video',
}
capabilities = {k: v for k, v in capabilities.items() if k in caps_map}
for capability, value in capabilities.items():
cls.BS_CAPABILITIES[caps_map[capability]] = value