Module appium.webdriver.extensions.hw_actions

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, Optional, TypeVar

from selenium import webdriver

from ..mobilecommand import MobileCommand as Command

T = TypeVar('T', bound='HardwareActions')


class HardwareActions(webdriver.Remote):

    def lock(self, seconds: Optional[int] = None) -> T:
        """Lock the device. No changes are made if the device is already unlocked.

        Args:
            seconds (:obj:`int`, optional): The duration to lock the device, in seconds.
                The device is going to be locked forever until `unlock` is called
                if it equals or is less than zero, otherwise this call blocks until
                the timeout expires and unlocks the screen automatically.

        Returns:
            `appium.webdriver.webdriver.WebDriver`
        """
        if seconds is None:
            self.execute(Command.LOCK)
        else:
            self.execute(Command.LOCK, {'seconds': seconds})

        return self

    def unlock(self) -> T:
        """Unlock the device. No changes are made if the device is already locked.

        Returns:
            `appium.webdriver.webdriver.WebDriver`
        """
        self.execute(Command.UNLOCK)
        return self

    def is_locked(self) -> bool:
        """Checks whether the device is locked.

        Returns:
            bool: `True` if the device is locked
        """
        return self.execute(Command.IS_LOCKED)['value']

    def shake(self) -> T:
        """Shake the device.

        Returns:
            `appium.webdriver.webdriver.WebDriver`
        """
        self.execute(Command.SHAKE)
        return self

    def touch_id(self, match: bool) -> T:
        """Simulate touchId on iOS Simulator

        Args:
            match (bool): Simulates a successful touch (`True`) or a failed touch (`False`)

        Returns:
            `appium.webdriver.webdriver.WebDriver`
        """
        data = {
            'match': match
        }
        self.execute(Command.TOUCH_ID, data)
        return self

    def toggle_touch_id_enrollment(self) -> T:
        """Toggle enroll touchId on iOS Simulator

        Returns:
            `appium.webdriver.webdriver.WebDriver`
        """
        self.execute(Command.TOGGLE_TOUCH_ID_ENROLLMENT)
        return self

    def finger_print(self, finger_id: int) -> Any:
        """Authenticate users by using their finger print scans on supported Android emulators.

        Args:
            finger_id (int): Finger prints stored in Android Keystore system (from 1 to 10)

        Returns:
            TODO
        """
        return self.execute(Command.FINGER_PRINT, {'fingerprintId': finger_id})['value']

    # pylint: disable=protected-access

    def _addCommands(self) -> None:
        self.command_executor._commands[Command.LOCK] = \
            ('POST', '/session/$sessionId/appium/device/lock')
        self.command_executor._commands[Command.UNLOCK] = \
            ('POST', '/session/$sessionId/appium/device/unlock')
        self.command_executor._commands[Command.IS_LOCKED] = \
            ('POST', '/session/$sessionId/appium/device/is_locked')
        self.command_executor._commands[Command.SHAKE] = \
            ('POST', '/session/$sessionId/appium/device/shake')
        self.command_executor._commands[Command.TOUCH_ID] = \
            ('POST', '/session/$sessionId/appium/simulator/touch_id')
        self.command_executor._commands[Command.TOGGLE_TOUCH_ID_ENROLLMENT] = \
            ('POST', '/session/$sessionId/appium/simulator/toggle_touch_id_enrollment')
        self.command_executor._commands[Command.FINGER_PRINT] = \
            ('POST', '/session/$sessionId/appium/device/finger_print')

Classes

class HardwareActions (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 HardwareActions(webdriver.Remote):

    def lock(self, seconds: Optional[int] = None) -> T:
        """Lock the device. No changes are made if the device is already unlocked.

        Args:
            seconds (:obj:`int`, optional): The duration to lock the device, in seconds.
                The device is going to be locked forever until `unlock` is called
                if it equals or is less than zero, otherwise this call blocks until
                the timeout expires and unlocks the screen automatically.

        Returns:
            `appium.webdriver.webdriver.WebDriver`
        """
        if seconds is None:
            self.execute(Command.LOCK)
        else:
            self.execute(Command.LOCK, {'seconds': seconds})

        return self

    def unlock(self) -> T:
        """Unlock the device. No changes are made if the device is already locked.

        Returns:
            `appium.webdriver.webdriver.WebDriver`
        """
        self.execute(Command.UNLOCK)
        return self

    def is_locked(self) -> bool:
        """Checks whether the device is locked.

        Returns:
            bool: `True` if the device is locked
        """
        return self.execute(Command.IS_LOCKED)['value']

    def shake(self) -> T:
        """Shake the device.

        Returns:
            `appium.webdriver.webdriver.WebDriver`
        """
        self.execute(Command.SHAKE)
        return self

    def touch_id(self, match: bool) -> T:
        """Simulate touchId on iOS Simulator

        Args:
            match (bool): Simulates a successful touch (`True`) or a failed touch (`False`)

        Returns:
            `appium.webdriver.webdriver.WebDriver`
        """
        data = {
            'match': match
        }
        self.execute(Command.TOUCH_ID, data)
        return self

    def toggle_touch_id_enrollment(self) -> T:
        """Toggle enroll touchId on iOS Simulator

        Returns:
            `appium.webdriver.webdriver.WebDriver`
        """
        self.execute(Command.TOGGLE_TOUCH_ID_ENROLLMENT)
        return self

    def finger_print(self, finger_id: int) -> Any:
        """Authenticate users by using their finger print scans on supported Android emulators.

        Args:
            finger_id (int): Finger prints stored in Android Keystore system (from 1 to 10)

        Returns:
            TODO
        """
        return self.execute(Command.FINGER_PRINT, {'fingerprintId': finger_id})['value']

    # pylint: disable=protected-access

    def _addCommands(self) -> None:
        self.command_executor._commands[Command.LOCK] = \
            ('POST', '/session/$sessionId/appium/device/lock')
        self.command_executor._commands[Command.UNLOCK] = \
            ('POST', '/session/$sessionId/appium/device/unlock')
        self.command_executor._commands[Command.IS_LOCKED] = \
            ('POST', '/session/$sessionId/appium/device/is_locked')
        self.command_executor._commands[Command.SHAKE] = \
            ('POST', '/session/$sessionId/appium/device/shake')
        self.command_executor._commands[Command.TOUCH_ID] = \
            ('POST', '/session/$sessionId/appium/simulator/touch_id')
        self.command_executor._commands[Command.TOGGLE_TOUCH_ID_ENROLLMENT] = \
            ('POST', '/session/$sessionId/appium/simulator/toggle_touch_id_enrollment')
        self.command_executor._commands[Command.FINGER_PRINT] = \
            ('POST', '/session/$sessionId/appium/device/finger_print')

Ancestors

  • selenium.webdriver.remote.webdriver.WebDriver

Subclasses

Methods

def finger_print(self, finger_id)

Authenticate users by using their finger print scans on supported Android emulators.

Args

finger_id : int
Finger prints stored in Android Keystore system (from 1 to 10)

Returns

TODO
 
Expand source code
def finger_print(self, finger_id: int) -> Any:
    """Authenticate users by using their finger print scans on supported Android emulators.

    Args:
        finger_id (int): Finger prints stored in Android Keystore system (from 1 to 10)

    Returns:
        TODO
    """
    return self.execute(Command.FINGER_PRINT, {'fingerprintId': finger_id})['value']
def is_locked(self)

Checks whether the device is locked.

Returns

bool
True if the device is locked
Expand source code
def is_locked(self) -> bool:
    """Checks whether the device is locked.

    Returns:
        bool: `True` if the device is locked
    """
    return self.execute(Command.IS_LOCKED)['value']
def lock(self, seconds=None)

Lock the device. No changes are made if the device is already unlocked.

Args

seconds (:obj:int, optional): The duration to lock the device, in seconds. The device is going to be locked forever until unlock is called if it equals or is less than zero, otherwise this call blocks until the timeout expires and unlocks the screen automatically.

Returns

WebDriver

Expand source code
def lock(self, seconds: Optional[int] = None) -> T:
    """Lock the device. No changes are made if the device is already unlocked.

    Args:
        seconds (:obj:`int`, optional): The duration to lock the device, in seconds.
            The device is going to be locked forever until `unlock` is called
            if it equals or is less than zero, otherwise this call blocks until
            the timeout expires and unlocks the screen automatically.

    Returns:
        `appium.webdriver.webdriver.WebDriver`
    """
    if seconds is None:
        self.execute(Command.LOCK)
    else:
        self.execute(Command.LOCK, {'seconds': seconds})

    return self
def shake(self)

Shake the device.

Returns

WebDriver

Expand source code
def shake(self) -> T:
    """Shake the device.

    Returns:
        `appium.webdriver.webdriver.WebDriver`
    """
    self.execute(Command.SHAKE)
    return self
def toggle_touch_id_enrollment(self)

Toggle enroll touchId on iOS Simulator

Returns

WebDriver

Expand source code
def toggle_touch_id_enrollment(self) -> T:
    """Toggle enroll touchId on iOS Simulator

    Returns:
        `appium.webdriver.webdriver.WebDriver`
    """
    self.execute(Command.TOGGLE_TOUCH_ID_ENROLLMENT)
    return self
def touch_id(self, match)

Simulate touchId on iOS Simulator

Args

match : bool
Simulates a successful touch (True) or a failed touch (False)

Returns

WebDriver

Expand source code
def touch_id(self, match: bool) -> T:
    """Simulate touchId on iOS Simulator

    Args:
        match (bool): Simulates a successful touch (`True`) or a failed touch (`False`)

    Returns:
        `appium.webdriver.webdriver.WebDriver`
    """
    data = {
        'match': match
    }
    self.execute(Command.TOUCH_ID, data)
    return self
def unlock(self)

Unlock the device. No changes are made if the device is already locked.

Returns

WebDriver

Expand source code
def unlock(self) -> T:
    """Unlock the device. No changes are made if the device is already locked.

    Returns:
        `appium.webdriver.webdriver.WebDriver`
    """
    self.execute(Command.UNLOCK)
    return self