diff --git a/test/conftest.py b/test/conftest.py index d5bf40318..ec30d02c5 100644 --- a/test/conftest.py +++ b/test/conftest.py @@ -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 diff --git a/test/python_tests.txt b/test/python_tests.txt index a182b4485..b760c9519 100644 --- a/test/python_tests.txt +++ b/test/python_tests.txt @@ -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 diff --git a/test/test_common.py b/test/test_common.py index 371023ab2..15344cb25 100644 --- a/test/test_common.py +++ b/test/test_common.py @@ -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) diff --git a/test/test_matplotlib.py b/test/test_matplotlib.py index 9530d7670..bd492c6ca 100644 --- a/test/test_matplotlib.py +++ b/test/test_matplotlib.py @@ -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()") diff --git a/test/test_python.py b/test/test_python.py index 98d4324fb..5b2c6be0e 100644 --- a/test/test_python.py +++ b/test/test_python.py @@ -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):