Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions CHANGES.rst
Original file line number Diff line number Diff line change
@@ -1,11 +1,18 @@
Changelog
=========

Unreleased
----------

- add option --splinter-webdriver-executable for phantomjs and chrome (sureshvv)


1.3.4
-----

- make ``browser_instance_getter`` session scoped, add ``session_browser`` fixture (bubenkoff, sureshvv)


1.3.3
-----

Expand Down
57 changes: 41 additions & 16 deletions pytest_splinter/plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,12 @@ def splinter_screenshot_dir(request):
return os.path.abspath(request.config.option.splinter_screenshot_dir)


@pytest.fixture(scope='session')
def splinter_webdriver_executable(request):
"""Webdriver executable directory."""
return os.path.abspath(request.config.option.splinter_webdriver_executable)


@pytest.fixture(scope='session')
def browser_pool(request, splinter_close_browser):
"""Browser 'pool' to emulate session scope but with possibility to recreate browser."""
Expand Down Expand Up @@ -241,6 +247,33 @@ def session_tmpdir(request):
return tmpdir(request)


def get_args(splinter_webdriver, splinter_file_download_dir, splinter_download_file_types,
splinter_firefox_profile_preferences, splinter_firefox_profile_directory,
splinter_remote_url, splinter_webdriver_executable, splinter_driver_kwargs):
""" pulled out for separate testing. """
kwargs = {}

if splinter_webdriver == 'firefox':
kwargs['profile_preferences'] = dict({
'browser.download.folderList': 2,
'browser.download.manager.showWhenStarting': False,
'browser.download.dir': splinter_file_download_dir,
'browser.helperApps.neverAsk.saveToDisk': splinter_download_file_types,
'browser.helperApps.alwaysAsk.force': False,
'pdfjs.disabled': True, # disable internal ff pdf viewer to allow auto pdf download
}, **splinter_firefox_profile_preferences)
kwargs['profile'] = splinter_firefox_profile_directory
elif splinter_webdriver == 'remote':
kwargs['url'] = splinter_remote_url
elif splinter_webdriver in ('phantomjs', 'chrome'):
if splinter_webdriver_executable:
kwargs['executable_path'] = splinter_webdriver_executable
if splinter_driver_kwargs:
kwargs.update(splinter_driver_kwargs)

return kwargs


@pytest.fixture(scope='session')
def browser_instance_getter(
browser_patches,
Expand Down Expand Up @@ -268,22 +301,9 @@ def browser_instance_getter(
:return: function(parent). Each time this function will return new instance of plugin.Browser class.
"""
def get_browser():
kwargs = {}

if splinter_webdriver == 'firefox':
kwargs['profile_preferences'] = dict({
'browser.download.folderList': 2,
'browser.download.manager.showWhenStarting': False,
'browser.download.dir': splinter_file_download_dir,
'browser.helperApps.neverAsk.saveToDisk': splinter_download_file_types,
'browser.helperApps.alwaysAsk.force': False,
'pdfjs.disabled': True, # disable internal ff pdf viewer to allow auto pdf download
}, **splinter_firefox_profile_preferences)
kwargs['profile'] = splinter_firefox_profile_directory
elif splinter_webdriver == 'remote':
kwargs['url'] = splinter_remote_url
if splinter_driver_kwargs:
kwargs.update(splinter_driver_kwargs)
kwargs = get_args(splinter_webdriver, splinter_file_download_dir, splinter_download_file_types,
splinter_firefox_profile_preferences, splinter_firefox_profile_directory,
splinter_remote_url, splinter_webdriver_executable, splinter_driver_kwargs)

return Browser(
splinter_webdriver, visit_condition=splinter_browser_load_condition,
Expand Down Expand Up @@ -438,3 +458,8 @@ def pytest_addoption(parser): # pragma: no cover
"--splinter-screenshot-dir",
help="pytest-splinter browser screenshot directory. Defaults to the current directory.", action="store",
dest='splinter_screenshot_dir', metavar="DIR", default='.')
group.addoption(
"--splinter-webdriver-executable",
help="pytest-splinter webdrive executable path. Defaults to unspecified in which case it is taken from PATH",
action="store",
dest='splinter_webdriver_executable', metavar="DIR", default='')
9 changes: 9 additions & 0 deletions tests/test_plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import pytest

from splinter.driver import DriverAPI
from pytest_splinter.plugin import get_args


@pytest.fixture
Expand Down Expand Up @@ -107,3 +108,11 @@ def test_get_current_window_info(browser):
def test_current_window_is_main(browser):
"""Test browser's driver current_window_is_main."""
assert browser.driver.current_window_is_main()


def test_executable():
""" improve testing coverage """
arg1 = get_args('phantomjs', '', '', '', '', '', '/tmp', '')
arg2 = get_args('chrome', '', '', '', '', '', '/tmp', '')
assert arg1['executable_path'] == '/tmp'
assert arg2['executable_path'] == '/tmp'