forked from appium/python-client
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhw_actions.py
More file actions
118 lines (93 loc) · 3.96 KB
/
hw_actions.py
File metadata and controls
118 lines (93 loc) · 3.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#!/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 selenium import webdriver
from ..mobilecommand import MobileCommand as Command
class HardwareActions(webdriver.Remote):
def lock(self, seconds=None):
"""Lock the device. No changes are made if the device is already unlocked.
Args:
seconds (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):
"""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):
"""Checks whether the device is locked.
Returns:
bool: `True` if the device is locked
"""
return self.execute(Command.IS_LOCKED)['value']
def shake(self):
"""Shake the device.
Returns:
`appium.webdriver.webdriver.WebDriver`
"""
self.execute(Command.SHAKE)
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:
`appium.webdriver.webdriver.WebDriver`
"""
data = {
'match': match
}
self.execute(Command.TOUCH_ID, data)
return self
def toggle_touch_id_enrollment(self):
"""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):
"""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):
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')