自制手机页面监视器

 自己写了个手机页面的监视器,新建一个线程通过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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值