自己写了个手机页面的监视器,新建一个线程通过ui自动化去处理常见的一些情况,如弹框授权等
import time
import threading
import uiautomator2 as u2
class Watcher():
def __init__(self, phoneui2, watcher_name=None, timeout=100):
self.__name = watcher_name
self.__keys = []
self.__max_records = 10
self.__records_cnt = 0
self.__records = []
self.__ui2 = phoneui2
self.__thread = threading.Thread(target=self.process)
self.__start_time = time.time()
self.__timeout = timeout
self.__stop = False
self.__thread.setDaemon(True)
def process(self):
while True:
if self.__stop:
break
if time.time()-self.__start_time > self.__timeout:
print("watcher is ended")
break
for k in self.__keys:
exist = False
for ki in k["k"]:
if not self.__ui2.exists(text=ki):
exist = False
break
else:
exist = True
if exist:
if k["f"]:
k["f"](self.__ui2)
else:
self.__ui2(text=k["k"][-1]).click()
# 记录处理过的情况
if self.__max_records > self.__records_cnt:
self.__records_cnt += 1
self.__records.append(k)
else:
self.__records.pop(0)
self.__records.append(k)
time.sleep(1)
def start(self):
self.__thread.start()
def join(self):
self.__thread.join()
def add(self, k, f=None):
self.__keys.append({"k": k, "f": f})
return self
def stop(self):
self.__stop = True
@property
def name(self):
return self.__name
@name.setter
def name(self, name):
self.__name = name
@property
def max_records(self):
return self.__max_records
@max_records.setter
def max_records(self, n):
self.__max_records = n
@property
def records(self):
return self.__records
调用方式:
import time
from Watcher import Watcher
import uiautomator2 as u2
d = u2.connect()
w = Watcher(d, timeout=1000)
w.max_records = 3
def process(u2):
u2(text="始终允许").click()
u2.press("back")
w.add(["设置"])\
.add(["同意"])\
.add(["确定"])\
.add(["允许"])\
.add(["跳过"])\
.add(["同意并使用"])\
.add(["始终允许"],f=process)\
.start()
d(scrollable=True).scroll.to(text="紧急情况")
d(text="紧急情况").click()
d(text="自然灾害预警").click()
d(text="地震预警").click()
time.sleep(10)
# w.join()
w.stop()
print("end")
print(w.records)