Merge pull request #118 from rth/reuse-selenium

Reuse selenium fixture in tests
This commit is contained in:
Michael Droettboom 2018-08-20 18:22:00 -04:00 committed by GitHub
commit 9ad6830e6c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 39 additions and 12 deletions

View File

@ -104,7 +104,7 @@ class ChromeWrapper(SeleniumWrapper):
if pytest is not None:
@pytest.fixture(params=['firefox', 'chrome'])
def selenium(request):
def selenium_standalone(request):
if request.param == 'firefox':
cls = FirefoxWrapper
elif request.param == 'chrome':
@ -116,6 +116,30 @@ if pytest is not None:
print('\n'.join(str(x) for x in selenium.logs))
selenium.driver.quit()
@pytest.fixture(params=['firefox', 'chrome'], scope='module')
def _selenium_cached(request):
# Cached selenium instance. This is a copy-paste of
# selenium_standalone to avoid fixture scope issues
if request.param == 'firefox':
cls = FirefoxWrapper
elif request.param == 'chrome':
cls = ChromeWrapper
selenium = cls()
try:
yield selenium
finally:
selenium.driver.quit()
@pytest.fixture
def selenium(_selenium_cached):
# selenium instance cached at the module level
try:
# clean selenium logs for each test run
_selenium_cached.driver.execute_script("window.logs = []")
yield _selenium_cached
finally:
print('\n'.join(str(x) for x in _selenium_cached.logs))
PORT = 0

View File

@ -368,7 +368,7 @@ test_repl subprocess
test_reprlib
test_resource
test_richcmp
test_rlcompleter
test_rlcompleter crash
test_robotparser
test_runpy crash
test_sax

View File

@ -32,16 +32,17 @@ UNSUPPORTED_PACKAGES = {'ChromeWrapper': ['pandas'],
@pytest.mark.parametrize('name', registered_packages())
def test_import(name, selenium):
def test_import(name, selenium_standalone):
# check that we can parse the meta.yaml
meta = common.parse_package(PKG_DIR / name / 'meta.yaml')
if name in UNSUPPORTED_PACKAGES[selenium.__class__.__name__]:
if name in UNSUPPORTED_PACKAGES[selenium_standalone.__class__.__name__]:
pytest.xfail(
'{} fails to load and is not supported on {}.'
.format(name,
selenium.__class__.__name__.replace('Wrapper', '')))
'{} fails to load and is not supported on {}.'
.format(name,
selenium_standalone.__class__.__name__
.replace('Wrapper', '')))
for import_name in meta.get('test', {}).get('imports', []):
selenium.load_package(name)
selenium.run('import %s' % import_name)
selenium_standalone.load_package(name)
selenium_standalone.run('import %s' % import_name)

View File

@ -1,12 +1,14 @@
def test_matplotlib(selenium):
selenium.load_package("matplotlib")
selenium.run("from matplotlib import pyplot as plt")
selenium.run("plt.figure()")
selenium.run("x = plt.plot([1,2,3])")
def test_svg(selenium):
selenium.load_package("matplotlib")
selenium.run("from matplotlib import pyplot as plt")
selenium.run("plt.figure()")
selenium.run("x = plt.plot([1,2,3])")
selenium.run("import io")
selenium.run("fd = io.BytesIO()")

View File

@ -6,9 +6,9 @@ import time
import pytest
def test_init(selenium):
assert 'Python initialization complete' in selenium.logs
assert len(selenium.driver.window_handles) == 1
def test_init(selenium_standalone):
assert 'Python initialization complete' in selenium_standalone.logs
assert len(selenium_standalone.driver.window_handles) == 1
def test_webbrowser(selenium):