Module appium.webdriver.extensions.execute_driver

Expand source code
#!/usr/bin/env python

# Licensed 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 typing import Any, Dict, Optional, Union

from selenium import webdriver

from ..mobilecommand import MobileCommand as Command


class ExecuteDriver(webdriver.Remote):

    # TODO Inner class case
    def execute_driver(self, script: str, script_type: str = 'webdriverio', timeout_ms: Optional[int] = None) -> Any:
        """Run a set of script against the current session, allowing execution of many commands in one Appium request.
        Please read http://appium.io/docs/en/commands/session/execute-driver for more details about the acceptable
        scripts and the output format.

        Args:
            script (str): The string consisting of the script itself
            script_type (str): The name of the script type. Defaults to 'webdriverio'.
            timeout_ms (:obj:`int`, optional): The number of `ms` Appium should wait for the script to finish before killing it due to timeout_ms.

        Usage:
            self.driver.execute_driver(script='return [];')
            self.driver.execute_driver(script='return [];', script_type='webdriverio')
            self.driver.execute_driver(script='return [];', script_type='webdriverio', timeout_ms=10000)

        Returns:
            ExecuteDriver.Result: The result of the script. It has 'result' and 'logs' keys.

        Raises:
            WebDriverException: If something error happenes in the script. The message has the original error message.
        """

        class Result:

            def __init__(self, response: Dict):
                self.result = response['result']
                self.logs = response['logs']

        option: Dict[str, Union[str, int]] = {'script': script, 'type': script_type}
        if timeout_ms is not None:
            option['timeout'] = timeout_ms

        response = self.execute(Command.EXECUTE_DRIVER, option)['value']
        return Result(response)

    # pylint: disable=protected-access

    def _addCommands(self) -> None:
        self.command_executor._commands[Command.EXECUTE_DRIVER] = \
            ('POST', '/session/$sessionId/appium/execute_driver')

Classes

class ExecuteDriver (command_executor='http://127.0.0.1:4444/wd/hub', desired_capabilities=None, browser_profile=None, proxy=None, keep_alive=False, file_detector=None, options=None)

Controls a browser by sending commands to a remote server. This server is expected to be running the WebDriver wire protocol as defined at https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol

:Attributes: - session_id - String ID of the browser session started and controlled by this WebDriver. - capabilities - Dictionaty of effective capabilities of this browser session as returned by the remote server. See https://github.com/SeleniumHQ/selenium/wiki/DesiredCapabilities - command_executor - remote_connection.RemoteConnection object used to execute commands. - error_handler - errorhandler.ErrorHandler object used to handle errors.

Create a new driver that will issue commands using the wire protocol.

:Args: - command_executor - Either a string representing URL of the remote server or a custom remote_connection.RemoteConnection object. Defaults to 'http://127.0.0.1:4444/wd/hub'. - desired_capabilities - A dictionary of capabilities to request when starting the browser session. Required parameter. - browser_profile - A selenium.webdriver.firefox.firefox_profile.FirefoxProfile object. Only used if Firefox is requested. Optional. - proxy - A selenium.webdriver.common.proxy.Proxy object. The browser session will be started with given proxy settings, if possible. Optional. - keep_alive - Whether to configure remote_connection.RemoteConnection to use HTTP keep-alive. Defaults to False. - file_detector - Pass custom file detector object during instantiation. If None, then default LocalFileDetector() will be used. - options - instance of a driver options.Options class

Expand source code
class ExecuteDriver(webdriver.Remote):

    # TODO Inner class case
    def execute_driver(self, script: str, script_type: str = 'webdriverio', timeout_ms: Optional[int] = None) -> Any:
        """Run a set of script against the current session, allowing execution of many commands in one Appium request.
        Please read http://appium.io/docs/en/commands/session/execute-driver for more details about the acceptable
        scripts and the output format.

        Args:
            script (str): The string consisting of the script itself
            script_type (str): The name of the script type. Defaults to 'webdriverio'.
            timeout_ms (:obj:`int`, optional): The number of `ms` Appium should wait for the script to finish before killing it due to timeout_ms.

        Usage:
            self.driver.execute_driver(script='return [];')
            self.driver.execute_driver(script='return [];', script_type='webdriverio')
            self.driver.execute_driver(script='return [];', script_type='webdriverio', timeout_ms=10000)

        Returns:
            ExecuteDriver.Result: The result of the script. It has 'result' and 'logs' keys.

        Raises:
            WebDriverException: If something error happenes in the script. The message has the original error message.
        """

        class Result:

            def __init__(self, response: Dict):
                self.result = response['result']
                self.logs = response['logs']

        option: Dict[str, Union[str, int]] = {'script': script, 'type': script_type}
        if timeout_ms is not None:
            option['timeout'] = timeout_ms

        response = self.execute(Command.EXECUTE_DRIVER, option)['value']
        return Result(response)

    # pylint: disable=protected-access

    def _addCommands(self) -> None:
        self.command_executor._commands[Command.EXECUTE_DRIVER] = \
            ('POST', '/session/$sessionId/appium/execute_driver')

Ancestors

  • selenium.webdriver.remote.webdriver.WebDriver

Subclasses

Methods

def execute_driver(self, script, script_type='webdriverio', timeout_ms=None)

Run a set of script against the current session, allowing execution of many commands in one Appium request. Please read http://appium.io/docs/en/commands/session/execute-driver for more details about the acceptable scripts and the output format.

Args

script : str
The string consisting of the script itself
script_type : str
The name of the script type. Defaults to 'webdriverio'.

timeout_ms (:obj:int, optional): The number of ms Appium should wait for the script to finish before killing it due to timeout_ms.

Usage

self.driver.execute_driver(script='return [];') self.driver.execute_driver(script='return [];', script_type='webdriverio') self.driver.execute_driver(script='return [];', script_type='webdriverio', timeout_ms=10000)

Returns

ExecuteDriver.Result: The result of the script. It has 'result' and 'logs' keys.

Raises

WebDriverException
If something error happenes in the script. The message has the original error message.
Expand source code
def execute_driver(self, script: str, script_type: str = 'webdriverio', timeout_ms: Optional[int] = None) -> Any:
    """Run a set of script against the current session, allowing execution of many commands in one Appium request.
    Please read http://appium.io/docs/en/commands/session/execute-driver for more details about the acceptable
    scripts and the output format.

    Args:
        script (str): The string consisting of the script itself
        script_type (str): The name of the script type. Defaults to 'webdriverio'.
        timeout_ms (:obj:`int`, optional): The number of `ms` Appium should wait for the script to finish before killing it due to timeout_ms.

    Usage:
        self.driver.execute_driver(script='return [];')
        self.driver.execute_driver(script='return [];', script_type='webdriverio')
        self.driver.execute_driver(script='return [];', script_type='webdriverio', timeout_ms=10000)

    Returns:
        ExecuteDriver.Result: The result of the script. It has 'result' and 'logs' keys.

    Raises:
        WebDriverException: If something error happenes in the script. The message has the original error message.
    """

    class Result:

        def __init__(self, response: Dict):
            self.result = response['result']
            self.logs = response['logs']

    option: Dict[str, Union[str, int]] = {'script': script, 'type': script_type}
    if timeout_ms is not None:
        option['timeout'] = timeout_ms

    response = self.execute(Command.EXECUTE_DRIVER, option)['value']
    return Result(response)