Permalink
Please sign in to comment.
Browse files
[py] Add WebKitGTK driver (#4635)
* [py] Add WebKitGTK driver
- Loading branch information...
Showing
with
238 additions
and 0 deletions.
- +1 −0 py/conftest.py
- +2 −0 py/selenium/webdriver/__init__.py
- +6 −0 py/selenium/webdriver/common/desired_capabilities.py
- +16 −0 py/selenium/webdriver/webkitgtk/__init__.py
- +96 −0 py/selenium/webdriver/webkitgtk/options.py
- +42 −0 py/selenium/webdriver/webkitgtk/service.py
- +73 −0 py/selenium/webdriver/webkitgtk/webdriver.py
- +1 −0 py/test/selenium/webdriver/common/driver_element_finding_tests.py
- +1 −0 py/test/selenium/webdriver/common/frame_switching_tests.py
| @@ -0,0 +1,16 @@ | ||
| # 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. |
| @@ -0,0 +1,96 @@ | ||
| # 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. | ||
| from selenium.webdriver.common.desired_capabilities import DesiredCapabilities | ||
| class Options(object): | ||
| def __init__(self): | ||
| self._browser_executable_path = '' | ||
| self._browser_arguments = [] | ||
| self._overlay_scrollbars_enabled = True | ||
| @property | ||
| def browser_executable_path(self): | ||
| """ | ||
| Returns the location of the browser binary otherwise an empty string | ||
| """ | ||
| return self._browser_executable_path | ||
| @browser_executable_path.setter | ||
| def browser_executable_path(self, value): | ||
| """ | ||
| Allows you to set the browser binary to launch | ||
| :Args: | ||
| - value : path to the browser binary | ||
| """ | ||
| self._browser_executable_path = value | ||
| @property | ||
| def browser_arguments(self): | ||
| """ | ||
| Returns a list of arguments needed for the browser | ||
| """ | ||
| return self._browser_arguments | ||
| def add_browser_argument(self, argument): | ||
| """ | ||
| Adds an argument to the list | ||
| :Args: | ||
| - Sets the arguments | ||
| """ | ||
| if argument: | ||
| self._browser_arguments.append(argument) | ||
| else: | ||
| raise ValueError("argument can not be null") | ||
| @property | ||
| def overlay_scrollbars_enabled(self): | ||
| """ | ||
| Returns whether overlay scrollbars should be enabled | ||
| """ | ||
| return self._overlay_scrollbars_enabled | ||
| @overlay_scrollbars_enabled.setter | ||
| def overlay_scrollbars_enabled(self, value): | ||
| """ | ||
| Allows you to enable or disable overlay scrollbars | ||
| :Args: | ||
| - value : True or False | ||
| """ | ||
| self._overlay_scrollbars_enabled = value | ||
| def to_capabilities(self): | ||
| """ | ||
| Creates a capabilities with all the options that have been set and | ||
| returns a dictionary with everything | ||
| """ | ||
| webkitgtk = DesiredCapabilities.WEBKITGTK.copy() | ||
| browser_options = {} | ||
| if self.browser_executable_path: | ||
| browser_options["binary"] = self.browser_executable_path | ||
| browser_options["args"] = self.browser_arguments | ||
| browser_options["useOverlayScrollbars"] = self.overlay_scrollbars_enabled | ||
| webkitgtk["webkitgtk:browserOptions"] = browser_options | ||
| return webkitgtk |
| @@ -0,0 +1,42 @@ | ||
| # 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. | ||
| from selenium.webdriver.common import service | ||
| class Service(service.Service): | ||
| """ | ||
| Object that manages the starting and stopping of the WebKitGTKDriver | ||
| """ | ||
| def __init__(self, executable_path, port=0, log_path=None): | ||
| """ | ||
| Creates a new instance of the Service | ||
| :Args: | ||
| - executable_path : Path to the WebKitGTKDriver | ||
| - port : Port the service is running on | ||
| - log_path : Path for the WebKitGTKDriver service to log to | ||
| """ | ||
| log_file = open(log_path, "wb") if log_path is not None and log_path != "" else None | ||
| service.Service.__init__(self, executable_path, port, log_file) | ||
| def command_line_args(self): | ||
| return ["-p", "%d" % self.port] | ||
| def send_remote_shutdown_command(self): | ||
| pass |
| @@ -0,0 +1,73 @@ | ||
| # 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. | ||
| try: | ||
| import http.client as http_client | ||
| except ImportError: | ||
| import httplib as http_client | ||
| from selenium.webdriver.common.desired_capabilities import DesiredCapabilities | ||
| from selenium.webdriver.remote.webdriver import WebDriver as RemoteWebDriver | ||
| from .service import Service | ||
| class WebDriver(RemoteWebDriver): | ||
| """ | ||
| Controls the WebKitGTKDriver and allows you to drive the browser. | ||
| """ | ||
| def __init__(self, executable_path="WebKitWebDriver", port=0, | ||
| browser_options=None, | ||
| desired_capabilities=DesiredCapabilities.WEBKITGTK, | ||
| service_log_path=None): | ||
| """ | ||
| Creates a new instance of the WebKitGTK driver. | ||
| Starts the service and then creates new instance of WebKitGTK Driver. | ||
| :Args: | ||
| - executable_path : path to the executable. If the default is used it assumes the executable is in the $PATH. | ||
| - port : port you would like the service to run, if left as 0, a free port will be found. | ||
| - browser_options : an instance of WebKitGTKOptions | ||
| - desired_capabilities : Dictionary object with desired capabilities | ||
| - service_log_path : Path to write service stdout and stderr output. | ||
| """ | ||
| if browser_options is not None: | ||
| capabilities = browser_options.to_capabilities() | ||
| capabilities.update(desired_capabilities) | ||
| desired_capabilities = capabilities | ||
| self.service = Service(executable_path, port=port, log_path=service_log_path) | ||
| self.service.start() | ||
| RemoteWebDriver.__init__( | ||
| self, | ||
| command_executor=self.service.service_url, | ||
| desired_capabilities=desired_capabilities) | ||
| self._is_remote = False | ||
| def quit(self): | ||
| """ | ||
| Closes the browser and shuts down the WebKitGTKDriver executable | ||
| that is started when starting the WebKitGTKDriver | ||
| """ | ||
| try: | ||
| RemoteWebDriver.quit(self) | ||
| except http_client.BadStatusLine: | ||
| pass | ||
| finally: | ||
| self.service.stop() |
0 comments on commit
56b3440