Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[py] Add WPEWebKit driver #6375

Merged
merged 2 commits into from
Mar 6, 2020
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions py/selenium/webdriver/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@
from .android.webdriver import WebDriver as Android # noqa
from .webkitgtk.webdriver import WebDriver as WebKitGTK # noqa
from .webkitgtk.options import Options as WebKitGTKOptions # noqa
from .wpewebkit.webdriver import WebDriver as WPEWebKit # noqa
from .wpewebkit.options import Options as WPEWebKitOptions # noqa
from .remote.webdriver import WebDriver as Remote # noqa
from .common.desired_capabilities import DesiredCapabilities # noqa
from .common.action_chains import ActionChains # noqa
Expand Down
6 changes: 6 additions & 0 deletions py/selenium/webdriver/common/desired_capabilities.py
Original file line number Diff line number Diff line change
Expand Up @@ -126,3 +126,9 @@ class DesiredCapabilities(object):
"version": "",
"platform": "ANY",
}

WPEWEBKIT = {
"browserName": "MiniBrowser",
"version": "",
"platform": "ANY",
}
16 changes: 16 additions & 0 deletions py/selenium/webdriver/wpewebkit/__init__.py
Original file line number Diff line number Diff line change
@@ -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.
88 changes: 88 additions & 0 deletions py/selenium/webdriver/wpewebkit/options.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
# 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):
KEY = 'wpe:browserOptions'

def __init__(self):
self._binary_location = ''
self._arguments = []
self._caps = DesiredCapabilities.WPEWEBKIT.copy()

@property
def capabilities(self):
return self._caps

def set_capability(self, name, value):
"""Sets a capability."""
self._caps[name] = value

@property
def binary_location(self):
"""
Returns the location of the browser binary otherwise an empty string
"""
return self._binary_location

@binary_location.setter
def binary_location(self, value):
"""
Allows you to set the browser binary to launch

:Args:
- value : path to the browser binary
"""
self._binary_location = value

@property
def arguments(self):
"""
Returns a list of arguments needed for the browser
"""
return self._arguments

def add_argument(self, argument):
"""
Adds an argument to the list

:Args:
- Sets the arguments
"""
if argument:
self._arguments.append(argument)
else:
raise ValueError("argument can not be null")

def to_capabilities(self):
"""
Creates a capabilities with all the options that have been set and
returns a dictionary with everything
"""
caps = self._caps

browser_options = {}
if self.binary_location:
browser_options["binary"] = self.binary_location
if self.arguments:
browser_options["args"] = self.arguments

caps[Options.KEY] = browser_options

return caps
42 changes: 42 additions & 0 deletions py/selenium/webdriver/wpewebkit/service.py
Original file line number Diff line number Diff line change
@@ -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 WPEWebKitDriver
"""

def __init__(self, executable_path, port=0, log_path=None):
"""
Creates a new instance of the Service

:Args:
- executable_path : Path to the WPEWebKitDriver
- port : Port the service is running on
- log_path : Path for the WPEWebKitDriver 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
72 changes: 72 additions & 0 deletions py/selenium/webdriver/wpewebkit/webdriver.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
# 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 WPEWebKitDriver and allows you to drive the browser.
"""

def __init__(self, executable_path="WPEWebDriver", port=0, options=None,
desired_capabilities=DesiredCapabilities.WPEWEBKIT,
service_log_path=None):
"""
Creates a new instance of the WPEWebKit driver.

Starts the service and then creates new instance of WPEWebKit 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.
- options : an instance of WPEWebKitOptions
- desired_capabilities : Dictionary object with desired capabilities
- service_log_path : Path to write service stdout and stderr output.
"""
if options is not None:
capabilities = 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 WPEWebKitDriver executable
that is started when starting the WPEWebKitDriver
"""
try:
RemoteWebDriver.quit(self)
except http_client.BadStatusLine:
pass
finally:
self.service.stop()