Skip to content

Commit 63d8543

Browse files
authored
Update minimum splinter version and remove phantomjs support (#110)
* Update requirements-testing.txt * Update .travis.yml * Add geckodriver to .travis.yml * Handle firefox not implementing status_code * Skip test due to firefox bug * Update patch_webdriver * Add MaxRetryError to caught exceptions * Add urllib3 to install requirements * Allow passing args to pytest
1 parent c9832a1 commit 63d8543

File tree

11 files changed

+61
-41
lines changed

11 files changed

+61
-41
lines changed

.travis.yml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,15 @@ sudo: false
22
language: python
33
python: "3.6"
44
addons:
5-
firefox: "37.0.1"
5+
firefox: "60.0.2"
66
before_install:
77
- "export DISPLAY=:99.0"
8+
- wget https://github.com/mozilla/geckodriver/releases/download/v0.21.0/geckodriver-v0.21.0-linux64.tar.gz
9+
- mkdir geckodriver
10+
- tar -xzf geckodriver-v0.21.0-linux64.tar.gz -C geckodriver
11+
- export PATH=$PATH:$PWD/geckodriver
812
- "sh -e /etc/init.d/xvfb start"
9-
- "npm install -g [email protected].0"
13+
- "npm install -g [email protected].2"
1014
- "selenium-standalone install"
1115
- "selenium-standalone start &"
1216
env:

CHANGES.rst

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
11
Changelog
22
=========
33

4+
1.9.2
5+
-----
6+
7+
- Bump minimum splinter version to 0.9.0 (jsfehler)
8+
- Remove phantomjs support. (jsfehler)
9+
410
1.9.1
511
-----
612

7-
- Fix utf-8 decode warnings when taking screenshots with pytest-xdist active `#108 <https://github.com/pytest-dev/pytest-splinter/issues/108>`_ (jsfehler)
13+
- Fix utf-8 decode warnings when taking screenshots with pytest-xdist active `#108 <https://github.com/pytest-dev/pytest-splinter/issues/108>`_ (jsfehler)
814

915

1016
1.9.0

README.rst

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ Fixtures
9090
@pytest.fixture(scope='session')
9191
def splinter_webdriver():
9292
"""Override splinter webdriver name."""
93-
return 'phantomjs'
93+
return 'chrome'
9494
9595
* splinter_remote_url
9696
Splinter's webdriver remote url to use (optional). Fixture gets the value from the command-line option
@@ -198,7 +198,6 @@ Command-line options
198198
* firefox
199199
* remote
200200
* chrome
201-
* phantomjs
202201

203202
For more details refer to the documentation for splinter and selenium.
204203

@@ -220,7 +219,7 @@ Command-line options
220219
directory.
221220

222221
* `--splinter-webdriver-executable`
223-
Filesystem path of the webdriver executable. Used by phantomjs and chrome drivers.
222+
Filesystem path of the webdriver executable. Used by chrome driver.
224223
Defaults to the None in which case the shell PATH variable setting determines the location of the executable.
225224

226225

pytest_splinter/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
"""pytest-splinter package."""
2-
__version__ = '1.9.1'
2+
__version__ = '1.9.2'

pytest_splinter/plugin.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
import splinter # pragma: no cover
1919
from _pytest import junitxml
2020

21+
from urllib3.exceptions import MaxRetryError
22+
2123
from selenium.webdriver.support import wait
2224
from selenium.webdriver.firefox.firefox_profile import FirefoxProfile
2325
from selenium.common.exceptions import WebDriverException
@@ -322,7 +324,7 @@ def get_args(driver=None,
322324
# https://github.com/mozilla/geckodriver#firefox-capabilities
323325
kwargs['moz:firefoxOptions'] = driver_kwargs.get('moz:firefoxOptions', {})
324326
kwargs['moz:firefoxOptions']['profile'] = profile.encoded
325-
elif driver in ('phantomjs', 'chrome'):
327+
elif driver in ('chrome',):
326328
if executable:
327329
kwargs['executable_path'] = executable
328330

@@ -570,7 +572,7 @@ def _take_screenshot_on_failure():
570572
browser.visit_condition = splinter_browser_load_condition
571573
browser.visit_condition_timeout = splinter_browser_load_timeout
572574
browser.visit('about:blank')
573-
except (IOError, HTTPException, WebDriverException):
575+
except (IOError, HTTPException, WebDriverException, MaxRetryError):
574576
# we lost browser, try to restore the justice
575577
try:
576578
browser.quit()

pytest_splinter/splinter_patches.py

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
from functools import partial
33

44
from splinter.driver.webdriver import firefox
5-
from splinter.driver.webdriver import phantomjs
65
from splinter.driver.webdriver import remote
76

87
from selenium.webdriver.common.action_chains import ActionChains # pragma: no cover
@@ -21,17 +20,5 @@ def mouse_over(self):
2120
# Apply the monkey patch for Firefox WebDriverElement
2221
firefox.WebDriverElement.mouse_over = mouse_over
2322

24-
old_text = phantomjs.WebDriverElement.text
25-
26-
def text(self):
27-
"""Get element text."""
28-
text = old_text.fget(self)
29-
if not text and self.html:
30-
text = self._element.get_attribute('outerText').strip().replace(u'\xa0', u' ')
31-
return text
32-
33-
# Apply the monkey patch for PhantomJs WebDriverElement
34-
phantomjs.WebDriverElement.text = property(text)
35-
phantomjs.WebDriverElement.mouse_over = mouse_over
3623
# Enable keep_alive for remove driver
3724
remote.Remote = partial(remote.Remote, keep_alive=True)

pytest_splinter/webdriver_patches.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,12 @@
88
import time # pragma: no cover
99
import socket # pragma: no cover
1010
try:
11-
from httplib import HTTPConnection, HTTPException
11+
from httplib import HTTPException
1212
except ImportError:
13-
from http.client import HTTPConnection, HTTPException
13+
from http.client import HTTPException
14+
15+
import urllib3
16+
from urllib3.exceptions import MaxRetryError
1417

1518
from selenium.webdriver.remote import remote_connection # pragma: no cover
1619
from selenium.webdriver.firefox import webdriver # pragma: no cover
@@ -39,12 +42,12 @@ def _request(self, *args, **kwargs):
3942
for _ in range(3):
4043
try:
4144
return old_request(self, *args, **kwargs)
42-
except (socket.error, HTTPException, IOError, OSError) as exc:
45+
except (socket.error, HTTPException, IOError, OSError, MaxRetryError) as exc:
4346
exception = exc
44-
self._conn = HTTPConnection(self._conn.host, self._conn.port, timeout=self._timeout)
47+
self._conn = urllib3.PoolManager(timeout=self._timeout)
4548
raise exception
4649

47-
# Apply the monkey patche for RemoteConnection
50+
# Apply the monkey patch for RemoteConnection
4851
remote_connection.RemoteConnection._request = _request
4952

5053
# Apply the monkey patch to Firefox webdriver to disable native events

requirements-testing.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@ pytest-localserver
44
pylama
55
pylama_pylint
66
astroid>=1.4.5
7-
selenium<3
8-
splinter<=0.7.5
7+
selenium
8+
splinter>=0.9.0

setup.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,10 @@
2626
url='https://github.com/pytest-dev/pytest-splinter',
2727
install_requires=[
2828
'setuptools',
29-
'splinter>=0.7.3',
30-
'selenium>=2.47.1',
29+
'splinter>=0.9.0',
30+
'selenium',
3131
'pytest>=3.0.0',
32+
'urllib3',
3233
],
3334
classifiers=[
3435
'Development Status :: 6 - Mature',

tests/test_plugin.py

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,25 @@ def test_session_browser(session_browser):
4444

4545
def test_status_code(browser, simple_page, splinter_webdriver):
4646
"""Check the browser fixture."""
47-
if splinter_webdriver == "zope.testbrowser":
48-
pytest.skip("zope testbrowser doesn't support status code")
47+
if splinter_webdriver in ("firefox", "zope.testbrowser",):
48+
skip_msg = "{} doesn't support status code".format(splinter_webdriver)
49+
pytest.skip(skip_msg)
4950
assert browser.status_code == 200
5051

5152

53+
def test_status_code_not_implemented(browser, simple_page, splinter_webdriver):
54+
"""Ensure the browsers which should not have status_code still don't."""
55+
if splinter_webdriver in ("firefox", "zope.testbrowser",):
56+
not_implemented = False
57+
try:
58+
browser.status_code == 200
59+
except NotImplementedError:
60+
not_implemented = True
61+
assert not_implemented
62+
else:
63+
pytest.skip('{} supports status code'.format(splinter_webdriver))
64+
65+
5266
@pytest.mark.parametrize(
5367
(
5468
'file_extension',
@@ -61,20 +75,26 @@ def test_status_code(browser, simple_page, splinter_webdriver):
6175
)
6276
def test_download_file(httpserver, browser, splinter_file_download_dir, file_extension, mime_type, splinter_webdriver):
6377
"""Test file downloading and accessing it afterwise."""
64-
if splinter_webdriver in ["zope.testbrowser", "phantomjs"]:
78+
if splinter_webdriver in ["zope.testbrowser"]:
6579
pytest.skip("{0} doesn't support file downloading".format(splinter_webdriver))
80+
if splinter_webdriver in ["firefox"]:
81+
pytest.skip("Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1366035")
6682
file_name = 'some.{0}'.format(file_extension)
6783
httpserver.serve_content(
6884
'Some text file', code=200, headers={
6985
'Content-Disposition': 'attachment; filename={0}'.format(file_name),
7086
'Content-Type': mime_type})
87+
7188
browser.visit(httpserver.url)
7289
time.sleep(1)
73-
assert open(os.path.join(splinter_file_download_dir, file_name)).read() == 'Some text file'
90+
91+
file_path = os.path.join(splinter_file_download_dir, file_name)
92+
with open(file_path, 'r') as f:
93+
assert f.read() == 'Some text file'
7494

7595

7696
@pytest.mark.parametrize('cookie_name', ['name1', 'name2'])
77-
@pytest.mark.parametrize('splinter_webdriver', ['firefox', 'phantomjs'])
97+
@pytest.mark.parametrize('splinter_webdriver', ['firefox'])
7898
def test_clean_cookies(httpserver, browser, cookie_name, splinter_webdriver, splinter_session_scoped_browser):
7999
"""Test that browser has always clean state (no cookies set)."""
80100
if splinter_webdriver == "zope.testbrowser":
@@ -94,7 +114,7 @@ def test_clean_cookies(httpserver, browser, cookie_name, splinter_webdriver, spl
94114

95115

96116
@pytest.mark.skipif('sys.version_info[0] > 2')
97-
# @pytest.mark.parametrize('splinter_webdriver', ['firefox', 'phantomjs'])
117+
# @pytest.mark.parametrize('splinter_webdriver', ['firefox'])
98118
def test_get_text(simple_page, browser, splinter_webdriver):
99119
"""Test that webelement correctly gets text."""
100120
if splinter_webdriver == "zope.testbrowser":
@@ -148,10 +168,8 @@ def test_current_window_is_main(browser, splinter_webdriver):
148168

149169
def test_executable():
150170
"""Test argument construction for webdrivers."""
151-
arg1 = get_args(driver='phantomjs', executable='/tmp')
152-
arg2 = get_args(driver='chrome', executable='/tmp')
171+
arg1 = get_args(driver='chrome', executable='/tmp')
153172
assert arg1['executable_path'] == '/tmp'
154-
assert arg2['executable_path'] == '/tmp'
155173

156174

157175
def assert_valid_html_screenshot_content(content):

0 commit comments

Comments
 (0)