-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathutils.py
96 lines (83 loc) · 3.29 KB
/
utils.py
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
"""Utils for Physalia samples"""
import sys
from com.dtmilano.android.viewclient import ViewClient
from physalia.energy_profiler import AndroidUseCase
class AndroidViewClientUseCase(AndroidUseCase):
"""`AndroidUseCase` to use with `AndroidViewClient`."""
# pylint: disable=not-callable
# pylint: disable=too-many-arguments
# Eight is reasonable in this case.
def __init__(self, name, app_apk, app_pkg, app_version,
run, prepare=None, cleanup=None): # noqa: D102
super(AndroidViewClientUseCase, self).__init__(
name, app_apk, app_pkg, app_version,
run, prepare, cleanup
)
self.device = None
self.serialno = None
self.view_client = None
def start_view_client(self, force=False):
"""Setup `AndroidViewClient`.
Args:
force (boolean): force start even if it was previously done (default False).
"""
# pylint: disable=attribute-defined-outside-init
if self.view_client is None or force is True:
original_argv = sys.argv
sys.argv = original_argv[:1]
kwargs1 = {'ignoreversioncheck': False,
'verbose': False,
'ignoresecuredevice': False}
device, serialno = ViewClient.connectToDeviceOrExit(**kwargs1)
kwargs2 = {'forceviewserveruse': False,
'useuiautomatorhelper': False,
'ignoreuiautomatorkilled': True,
'autodump': False,
'startviewserver': True,
'compresseddump': True}
view_client = ViewClient(device, serialno, **kwargs2)
sys.argv = original_argv
self.device = device
self.serialno = serialno
self.view_client = view_client
#always refresh
self.refresh()
def prepare(self):
"""Prepare environment for running.
Setup Android View Client in order to run experiments.
"""
self.start_view_client()
self._prepare()
def refresh(self):
"""Refresh `AndroidViewClient`."""
while True:
try:
self.view_client.dump(window='-1')
except RuntimeError:
continue
break
def wait_for_id(self, view_id):
"""Refresh `AndroidViewClient` until view id is found."""
view = self.view_client.findViewById(view_id)
while view is None:
self.refresh()
view = self.view_client.findViewById(view_id)
return view
def wait_for_text(self, text):
"""Refresh `AndroidViewClient` until text is found."""
view = self.view_client.findViewWithText(text)
while view is None:
self.refresh()
view = self.view_client.findViewWithText(text)
return view
def wait_for_content_description(self, content_description):
"""Refresh `AndroidViewClient` until content description is found."""
view = self.view_client.findViewWithContentDescription(
content_description
)
while view is None:
self.refresh()
view = self.view_client.findViewWithContentDescription(
content_description
)
return view