-
-
Notifications
You must be signed in to change notification settings - Fork 8.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[py] Add the ability to get and set timeouts against a driver. Fixes #…
…7738 This adds in Get Timeouts command as described in https://w3c.github.io/webdriver/#get-timeouts and cleans up the Set Timeouts command. A new Timeouts object has been added to help guide people through this.
- Loading branch information
1 parent
24ab1e5
commit a849bb7
Showing
5 changed files
with
204 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,94 @@ | ||
# Licensed to the Software Freedom Conservancy (SFC) under one | ||
# or more contributor license agreements. See the NOTICE file | ||
# distributed with this work for additional information | ||
# regarding copyright ownership. The SFC licenses this file | ||
# to you under the Apache License, Version 2.0 (the | ||
# "License"); you may not use this file except in compliance | ||
# with the License. You may obtain a copy of the License at | ||
# | ||
# http://www.apache.org/licenses/LICENSE-2.0 | ||
# | ||
# Unless required by applicable law or agreed to in writing, | ||
# software distributed under the License is distributed on an | ||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||
# KIND, either express or implied. See the License for the | ||
# specific language governing permissions and limitations | ||
# under the License. | ||
|
||
class Timeouts(object): | ||
|
||
def __init__(self, implicit_wait=None, page_load=None, script=None): | ||
""" | ||
Create a new Timeout object. | ||
:Args: | ||
- implicit_wait - Either an int or a float. The number passed in needs to how many | ||
seconds the driver will wait. | ||
- page_load - Either an int or a float. The number passed in needs to how many | ||
seconds the driver will wait. | ||
- script - Either an int or a float. The number passed in needs to how many | ||
seconds the driver will wait. | ||
""" | ||
self._implicit_wait = self._convert(implicit_wait) | ||
self._page_load = self._convert(page_load) | ||
self._script = self._convert(script) | ||
|
||
@property | ||
def implicit_wait(self): | ||
""" | ||
Return the value for the implicit wait. This does not return the value on the remote end | ||
""" | ||
return self._implicit_wait / 1000 | ||
|
||
@implicit_wait.setter | ||
def implicit_wait(self, _implicit_wait): | ||
""" | ||
Sets the value for the implicit wait. This does not set the value on the remote end | ||
""" | ||
self._implicit_wait = self._convert(_implicit_wait) | ||
|
||
@property | ||
def page_load(self): | ||
""" | ||
Return the value for the page load wait. This does not return the value on the remote end | ||
""" | ||
return self._page_load / 1000 | ||
|
||
@page_load.setter | ||
def page_load(self, _page_load): | ||
""" | ||
Sets the value for the page load wait. This does not set the value on the remote end | ||
""" | ||
self._page_load = self._convert(_page_load) | ||
|
||
@property | ||
def script(self): | ||
""" | ||
Return the value for the script wait. This does not return the value on the remote end | ||
""" | ||
return self._script / 1000 | ||
|
||
@script.setter | ||
def script(self, _script): | ||
""" | ||
Sets the value for the script wait. This does not set the value on the remote end | ||
""" | ||
self._script = self._convert(_script) | ||
|
||
def _convert(self, timeout): | ||
if timeout is not None: | ||
if isinstance(timeout, (int, float)): | ||
return int(float(timeout) * 1000) | ||
else: | ||
raise TypeError("Timeouts can only be an int or a float") | ||
|
||
def _to_json(self): | ||
timeouts = {} | ||
if self._implicit_wait is not None: | ||
timeouts["implicit"] = self._implicit_wait | ||
if self._page_load is not None: | ||
timeouts["pageLoad"] = self._page_load | ||
if self._script is not None: | ||
timeouts["script"] = self._script | ||
|
||
return timeouts |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
# Licensed to the Software Freedom Conservancy (SFC) under one | ||
# or more contributor license agreements. See the NOTICE file | ||
# distributed with this work for additional information | ||
# regarding copyright ownership. The SFC licenses this file | ||
# to you under the Apache License, Version 2.0 (the | ||
# "License"); you may not use this file except in compliance | ||
# with the License. You may obtain a copy of the License at | ||
# | ||
# http://www.apache.org/licenses/LICENSE-2.0 | ||
# | ||
# Unless required by applicable law or agreed to in writing, | ||
# software distributed under the License is distributed on an | ||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||
# KIND, either express or implied. See the License for the | ||
# specific language governing permissions and limitations | ||
# under the License. | ||
|
||
|
||
import pytest | ||
|
||
from selenium.webdriver.common.timeouts import Timeouts | ||
|
||
def test_should_create_timeouts_object(): | ||
implicit_wait = 10 | ||
page_load = 10 | ||
script = 10 | ||
timeouts = Timeouts(implicit_wait=implicit_wait,page_load=page_load,script=script) | ||
|
||
assert implicit_wait == timeouts.implicit_wait | ||
assert page_load == timeouts.page_load | ||
assert script == timeouts.script | ||
|
||
def test_should_error_if_implicit_wait_isnt_a_number(): | ||
with pytest.raises(TypeError): | ||
Timeouts(implicit_wait="abc") | ||
|
||
timeout = Timeouts(implicit_wait=0) | ||
with pytest.raises(TypeError): | ||
timeout.implicit_wait="abc" | ||
|
||
|
||
def test_should_error_if_page_load_isnt_a_number(): | ||
with pytest.raises(TypeError): | ||
Timeouts(page_load="abc") | ||
|
||
timeout = Timeouts(page_load=0) | ||
with pytest.raises(TypeError): | ||
timeout.page_load = "abc" | ||
|
||
|
||
def test_should_error_if_script_isnt_a_number(): | ||
with pytest.raises(TypeError): | ||
Timeouts(script="abc") | ||
|
||
timeout = Timeouts(script=0) | ||
with pytest.raises(TypeError): | ||
timeout.script = "abc" | ||
|
||
|
||
def test_should_get_timeouts_without_setting_them(driver): | ||
results = driver.timeouts | ||
assert results.implicit_wait == 0 | ||
assert results.page_load == 300 | ||
assert results.script == 30 | ||
|
||
def test_should_set_and_get_timeouts_on_remote_end(driver): | ||
timeout = Timeouts(implicit_wait=10) | ||
driver.timeouts = timeout | ||
result = driver.timeouts | ||
assert result.implicit_wait == timeout.implicit_wait |