# This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. from . import errors DEFAULT_SCRIPT_TIMEOUT = 30 DEFAULT_PAGE_LOAD_TIMEOUT = 300 DEFAULT_IMPLICIT_WAIT_TIMEOUT = 0 class Timeouts(object): """Manage timeout settings in the Marionette session. Usage:: marionette = Marionette(...) marionette.start_session() marionette.timeout.page_load = 10 marionette.timeout.page_load # => 10 """ def __init__(self, marionette): self._marionette = marionette def _set(self, name, sec): ms = sec * 1000 self._marionette._send_message("WebDriver:SetTimeouts", {name: ms}) def _get(self, name): ts = self._marionette._send_message("WebDriver:GetTimeouts") if name not in ts: raise KeyError() ms = ts[name] return ms / 1000.0 @property def script(self): """Get the session's script timeout. This specifies the time to wait for injected scripts to finished before interrupting them. It is by default 30 seconds. """ return self._get("script") @script.setter def script(self, sec): """Set the session's script timeout. This specifies the time to wait for injected scripts to finish before interrupting them. """ self._set("script", sec) @property def page_load(self): """Get the session's page load timeout. This specifies the time to wait for the page loading to complete. It is by default 5 minutes (or 300 seconds). """ # remove fallback when Firefox 56 is stable try: return self._get("pageLoad") except KeyError: return self._get("page load") @page_load.setter def page_load(self, sec): """Set the session's page load timeout. This specifies the time to wait for the page loading to complete. """ # remove fallback when Firefox 56 is stable try: self._set("pageLoad", sec) except errors.InvalidArgumentException: return self._set("page load", sec) @property def implicit(self): """Get the session's implicit wait timeout. This specifies the time to wait for the implicit element location strategy when retrieving elements. It is by default disabled (0 seconds). """ return self._get("implicit") @implicit.setter def implicit(self, sec): """Set the session's implicit wait timeout. This specifies the time to wait for the implicit element location strategy when retrieving elements. """ self._set("implicit", sec) def reset(self): """Resets timeouts to their default values.""" self.script = DEFAULT_SCRIPT_TIMEOUT self.page_load = DEFAULT_PAGE_LOAD_TIMEOUT self.implicit = DEFAULT_IMPLICIT_WAIT_TIMEOUT