Skip to content

Commit

Permalink
Merge 6d72931 into 3e55bcb
Browse files Browse the repository at this point in the history
  • Loading branch information
vernans committed Jan 13, 2021
2 parents 3e55bcb + 6d72931 commit 13f5306
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 38 deletions.
2 changes: 1 addition & 1 deletion src/gocept/selenium/tests/test_wd_selenese.py
Original file line number Diff line number Diff line change
Expand Up @@ -252,7 +252,7 @@ def test_wd_selenese__Selenese__click__1(self):
with self.assertRaises(ElementClickInterceptedException) as e:
self.selenium.click('css=.intercepted')
self.assertEllipsis(
'Timed out after 1.0 s. Element ... not clickable ... obscures it',
'Timed out after 1.0 s...',
e.exception.msg)

def test_wd_selenese__Selense__selectParentFrame__1(self):
Expand Down
95 changes: 58 additions & 37 deletions src/gocept/selenium/webdriver.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
#
##############################################################################

from selenium.common.exceptions import JavascriptException
from selenium.common.exceptions import JavascriptException, WebDriverException
from selenium.webdriver.firefox.firefox_profile import FirefoxProfile
import atexit
import gocept.selenium.wd_selenese
Expand Down Expand Up @@ -57,24 +57,6 @@ def setUp(self):

if browser.lower() == 'chrome':
self._browser = 'chrome'
else:
self.profile = FirefoxProfile(
os.environ.get(
'GOCEPT_WEBDRIVER_FF_PROFILE',
os.environ.get('GOCEPT_SELENIUM_FF_PROFILE')))
self.profile.native_events_enabled = True
self.profile.update_preferences()
# Save downloads always to disk into a predefined dir.
self['selenium_download_dir'] = pathlib.Path(tempfile.mkdtemp(
prefix='gocept.selenium.download-dir'))
self.profile.set_preference("browser.download.folderList", 2)
self.profile.set_preference(
"browser.download.manager.showWhenStarting", False)
self.profile.set_preference(
"browser.download.dir", str(self['selenium_download_dir']))
self.profile.set_preference(
"browser.helperApps.neverAsk.saveToDisk", "application/pdf")
self.profile.set_preference("pdfjs.disabled", True)

self._start_selenium()
atexit.register(self._stop_selenium)
Expand All @@ -87,29 +69,68 @@ def tearDown(self):
self['seleniumrc'].session_id = None
del self['seleniumrc']

def _start_selenium(self):
if self._browser == 'firefox':
options = selenium.webdriver.FirefoxOptions()
def get_firefox_webdriver_args(self):
options = selenium.webdriver.FirefoxOptions()

if self.headless:
options.add_argument('-headless')

profile = FirefoxProfile(
os.environ.get(
'GOCEPT_WEBDRIVER_FF_PROFILE',
os.environ.get('GOCEPT_SELENIUM_FF_PROFILE')))
profile.native_events_enabled = True
profile.update_preferences()
# Save downloads always to disk into a predefined dir.
self['selenium_download_dir'] = pathlib.Path(tempfile.mkdtemp(
prefix='gocept.selenium.download-dir'))
profile.set_preference("browser.download.folderList", 2)
profile.set_preference(
"browser.download.manager.showWhenStarting", False)
profile.set_preference(
"browser.download.dir", str(self['selenium_download_dir']))
profile.set_preference(
"browser.helperApps.neverAsk.saveToDisk", "application/pdf")
profile.set_preference("pdfjs.disabled", True)

return {'options': options, 'firefox_profile': profile}

def get_chrome_webdriver_args(self):
options = selenium.webdriver.ChromeOptions()
options.add_argument('--disable-dev-shm-usage')

if self.headless:
options.add_argument('--headless')
else:
raise NotImplementedError(
'Chromedriver currently only works headless.')

if self.headless:
options.add_argument('-headless')
# Setup download dir.
self['selenium_download_dir'] = pathlib.Path(tempfile.mkdtemp(
prefix='gocept.selenium.download-dir'))

self['seleniumrc'] = selenium.webdriver.Firefox(
firefox_profile=self.profile, options=options)
prefs = {
'download.default_directory': str(self['selenium_download_dir']),
'download.prompt_for_download': False,
}

if self._browser == 'chrome':
options = selenium.webdriver.ChromeOptions()
options.add_argument('--disable-dev-shm-usage')
options.add_experimental_option('prefs', prefs)

if self.headless:
options.add_argument('--headless')
else:
raise NotImplementedError(
'Chromedriver currently only works headless.')
return {
'options': options,
'service_args': ['--log-path=chromedriver.log']
}

def _start_selenium(self):
if self._browser == 'firefox':
self['seleniumrc'] = selenium.webdriver.Firefox(
**self.get_firefox_webdriver_args(),
)

if self._browser == 'chrome':
self['seleniumrc'] = selenium.webdriver.Chrome(
options=options,
service_args=['--log-path=chromedriver.log'])
**self.get_chrome_webdriver_args(),
)

def _stop_selenium(self):
# Only stop selenium if it is still active.
Expand All @@ -123,7 +144,7 @@ def _stop_selenium(self):
def testTearDown(self):
try:
self['seleniumrc'].execute_script('window.localStorage.clear()')
except JavascriptException:
except (JavascriptException, WebDriverException):
# We can't do anything here, there might be no current_url
pass
for path in self['selenium_download_dir'].iterdir():
Expand Down

0 comments on commit 13f5306

Please sign in to comment.