prepare_browser() infinite loop with Chrome
miohtama opened this issue · 5 comments
On OSX + Python 3.5 I managed to get infinite loop with prepare_browser
. For some reason this function calls itself. It is not clear from comments or code why it does this.
File "/Users/mikko/code/xxx/websauna/venv/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 253, in _wrapped_call
return call_outcome.get_result()
File "/Users/mikko/code/xxx/websauna/venv/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 278, in get_result
raise ex[1].with_traceback(ex[2])
File "/Users/mikko/code/xxx/websauna/venv/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 264, in __init__
self.result = func()
File "/Users/mikko/code/xxx/websauna/venv/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 596, in execute
res = hook_impl.function(*args)
File "/Users/mikko/code/xxx/websauna/venv/lib/python3.5/site-packages/_pytest/runner.py", line 87, in pytest_runtest_setup
item.session._setupstate.prepare(item)
File "/Users/mikko/code/xxx/websauna/venv/lib/python3.5/site-packages/_pytest/runner.py", line 408, in prepare
col.setup()
File "/Users/mikko/code/xxx/websauna/venv/lib/python3.5/site-packages/_pytest/python.py", line 1419, in setup
fillfixtures(self)
File "/Users/mikko/code/xxx/websauna/venv/lib/python3.5/site-packages/_pytest/python.py", line 819, in fillfixtures
request._fillfixtures()
File "/Users/mikko/code/xxx/websauna/venv/lib/python3.5/site-packages/_pytest/python.py", line 1567, in _fillfixtures
item.funcargs[argname] = self.getfuncargvalue(argname)
File "/Users/mikko/code/xxx/websauna/venv/lib/python3.5/site-packages/_pytest/python.py", line 1610, in getfuncargvalue
return self._get_active_fixturedef(argname).cached_result[0]
File "/Users/mikko/code/xxx/websauna/venv/lib/python3.5/site-packages/_pytest/python.py", line 1627, in _get_active_fixturedef
result = self._getfuncargvalue(fixturedef)
File "/Users/mikko/code/xxx/websauna/venv/lib/python3.5/site-packages/_pytest/python.py", line 1673, in _getfuncargvalue
val = fixturedef.execute(request=subrequest)
File "/Users/mikko/code/xxx/websauna/venv/lib/python3.5/site-packages/_pytest/python.py", line 2135, in execute
self.yieldctx)
File "/Users/mikko/code/xxx/websauna/venv/lib/python3.5/site-packages/_pytest/python.py", line 2056, in call_fixture_func
res = fixturefunc(**kwargs)
File "/Users/mikko/code/xxx/websauna/websauna/tests/conftest.py", line 193, in browser
return browser_instance_getter(request, browser)
File "/Users/mikko/code/xxx/websauna/venv/lib/python3.5/site-packages/pytest_splinter/plugin.py", line 426, in prepare_browser
prepare_browser(request, parent)
File "/Users/mikko/code/xxx/websauna/venv/lib/python3.5/site-packages/pytest_splinter/plugin.py", line 426, in prepare_browser
prepare_browser(request, parent)
File "/Users/mikko/code/xxx/websauna/venv/lib/python3.5/site-packages/pytest_splinter/plugin.py", line 426, in prepare_browser
prepare_browser(request, parent)
File "/Users/mikko/code/xxx/websauna/venv/lib/python3.5/site-packages/pytest_splinter/plugin.py", line 426, in prepare_browser
prepare_browser(request, parent)
File "/Users/mikko/code/xxx/websauna/venv/lib/python3.5/site-packages/pytest_splinter/plugin.py", line 426, in prepare_browser
prepare_browser(request, parent)
File "/Users/mikko/code/xxx/websauna/venv/lib/python3.5/site-packages/pytest_splinter/plugin.py", line 426, in prepare_browser
prepare_browser(request, parent)
File "/Users/mikko/code/xxx/websauna/venv/lib/python3.5/site-packages/pytest_splinter/plugin.py", line 426, in prepare_browser
prepare_browser(request, parent)
File "/Users/mikko/code/xxx/websauna/venv/lib/python3.5/site-packages/pytest_splinter/plugin.py", line 426, in prepare_browser
prepare_browser(request, parent)
File "/Users/mikko/code/xxx/websauna/venv/lib/python3.5/site-packages/pytest_splinter/plugin.py", line 426, in prepare_browser
prepare_browser(request, parent)
File "/Users/mikko/code/xxx/websauna/venv/lib/python3.5/site-packages/pytest_splinter/plugin.py", line 426, in prepare_browser
prepare_browser(request, parent)
File "/Users/mikko/code/xxx/websauna/venv/lib/python3.5/site-packages/pytest_splinter/plugin.py", line 425, in prepare_browser
browser = browser_pool[browser_key] = get_browser(splinter_webdriver)
File "/Users/mikko/code/xxx/websauna/venv/lib/python3.5/site-packages/pytest_splinter/plugin.py", line 381, in get_browser
wait_time=splinter_wait_time, **kwargs
File "/Users/mikko/code/xxx/websauna/venv/lib/python3.5/site-packages/pytest_splinter/plugin.py", line 68, in Browser
browser = splinter.Browser(*args, **kwargs)
File "/Users/mikko/code/xxx/websauna/venv/lib/python3.5/site-packages/splinter/browser.py", line 63, in Browser
return driver(*args, **kwargs)
After commenting out the loop, underlying error is
response = {'sessionId': 'e249273f1e890b681e055d655e2e9ea5', 'status': 13, 'value': {'message': 'unknown error: No current window... (Driver info: chromedriver=2.20.353124 (035346203162d32c80f1dce587c8154a1efa0c3b),platform=Mac OS X 10.11.6 x86_64)'}}
In the same function
# browser.driver.set_window_size(*splinter_window_size)
fixes it. New Chrome versions can't set window size anymore?
For the record: I've faced time consuming debugging because of this recursive call too: MS Edge crashes when removing all cookies (😶 : https://connect.microsoft.com/IE/feedback/details/1864122/edge-driver-cant-delete-cookies). That causes prepare_browser to be called infinite amount of times since it throws WebDriverException is thrown.
I would propose to avoid catching the exceptions and just fail if prepare_browser fails. What is the motivation of retrying on http/io errors? In what kinds of situations would the webdriver server return these kinds of errors where one would retry and keep running the tests? If this happens I would say that your remote selenium server needs fixing. :)
Or maybe we could just avoid catching WebDriverException
but still catch http/io errors, that would have solved my problems and brings less changes from the current solution.
In my case this has (probably) caused more harm than good but I am sure there is a reason for this, could you give some hints on this @bubenkoff ? :)