Skip to content

Commit

Permalink
Use a case insensitive dictionary so that we can have mixed cases as …
Browse files Browse the repository at this point in the history
…the keys
  • Loading branch information
davehunt committed Dec 1, 2017
1 parent 20c7256 commit 0777138
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 21 deletions.
35 changes: 15 additions & 20 deletions pytest_selenium/pytest_selenium.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,30 +8,30 @@
import os

import pytest
from requests.structures import CaseInsensitiveDict
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.support.event_firing_webdriver import \
EventFiringWebDriver

from . import drivers

SUPPORTED_DRIVERS = {
'browserstack': webdriver.Remote,
'crossbrowsertesting': webdriver.Remote,
'chrome': webdriver.Chrome,
'edge': webdriver.Edge,
'firefox': webdriver.Firefox,
'ie': webdriver.Ie,
'phantomjs': webdriver.PhantomJS,
'remote': webdriver.Remote,
'safari': webdriver.Safari,
'saucelabs': webdriver.Remote,
'testingbot': webdriver.Remote}
SUPPORTED_DRIVERS = CaseInsensitiveDict({
'BrowserStack': webdriver.Remote,
'CrossBrowserTesting': webdriver.Remote,
'Chrome': webdriver.Chrome,
'Edge': webdriver.Edge,
'Firefox': webdriver.Firefox,
'IE': webdriver.Ie,
'PhantomJS': webdriver.PhantomJS,
'Remote': webdriver.Remote,
'Safari': webdriver.Safari,
'SauceLabs': webdriver.Remote,
'TestingBot': webdriver.Remote})


def pytest_addhooks(pluginmanager):
from . import hooks

method = getattr(pluginmanager, 'add_hookspecs', None)
if method is None:
method = pluginmanager.addhooks
Expand Down Expand Up @@ -109,8 +109,7 @@ def driver_class(request):
driver = request.config.getoption('driver')
if driver is None:
raise pytest.UsageError('--driver must be specified')
driver = SUPPORTED_DRIVERS[driver.lower()]
return driver
return SUPPORTED_DRIVERS[driver]


@pytest.fixture
Expand Down Expand Up @@ -288,11 +287,6 @@ def split_class_and_test_names(nodeid):
class DriverAction(argparse.Action):

def __call__(self, parser, namespace, values, option_string=None):
if values.lower() not in SUPPORTED_DRIVERS.keys():
message = ("invalid choice: {0} (choose from {1})".format(
values, ', '.join(SUPPORTED_DRIVERS.keys())))
raise argparse.ArgumentError(self, message)

setattr(namespace, self.dest, values)
driver = getattr(drivers, values.lower())
# set the default host and port if specified in the driver module
Expand All @@ -312,6 +306,7 @@ def pytest_addoption(parser):
group = parser.getgroup('selenium', 'selenium')
group._addoption('--driver',
action=DriverAction,
choices=SUPPORTED_DRIVERS,
help='webdriver implementation.',
metavar='str')
group._addoption('--driver-path',
Expand Down
2 changes: 1 addition & 1 deletion testing/test_driver.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ def test_pass(): pass
""")
invalid_driver = 'noop'
result = testdir.runpytest('--driver', invalid_driver)
message = '--driver: invalid choice: {}'.format(invalid_driver)
message = "--driver: invalid choice: '{}'".format(invalid_driver)
assert message in result.errlines[1]


Expand Down

0 comments on commit 0777138

Please sign in to comment.