app自动化弹窗识别

如何实现以下的逻辑,在出现 弹窗时就进行点击,不出现就运行其他代码

img

app UI自动化弹窗监听机制
如有帮助,望采纳
https://blog.csdn.net/May_JL/article/details/122362020

不可以直接判断吗


import uiautomator2 as u2
import os
import time

base_dir = os.path.dirname(__file__)
apk_path = os.path.join(base_dir, 'apks/bilibili.apk')

d = u2.connect_usb(serial='MDX0220924018819')

# 从安装到登录成功后,可能会出现的弹窗,在这里进行注册,这个是华为手机出现的弹窗类型
d.watcher.when('继续安装').click()
d.watcher.when('完成').click()
d.watcher.when('同意并继续').click()
d.watcher.when("我知道了").click()
d.watcher.start()

d.app_install(apk_path)

d.app_start('tv.danmaku.bili')

d(text='我的').click()
time.sleep(3)
if d(resourceId="tv.danmaku.bili:id/btn_change_account").exists:
    d(resourceId="tv.danmaku.bili:id/btn_change_account").click()
else:
    d(resourceId="tv.danmaku.bili:id/tv_login").click()
time.sleep(3)
d(resourceId="tv.danmaku.bili:id/username").set_text('xxxxxxxxx')

d(resourceId="tv.danmaku.bili:id/userpwd").set_text('xxxxxxxx')

d(resourceId="tv.danmaku.bili:id/log_reg_checkbox").click()

time.sleep(2)
d(resourceId="tv.danmaku.bili:id/btn_login").click()
d(text='首页').click()

弹窗处理有2种方法:

  1. 先判断是否存在,如果存在timeout设置时间内存在,即点掉,如下代码,3秒内出现,就会点掉,这个方法如果需要处理弹窗较多,会导致脚本运行效率降低,因为不存在弹窗时,会强制等待到你设置得时间。
    ```
if d(text='CANCEL').exists(timeout=3): #这里代表最多等待3S,时间可以随意设置
    d(text='CANCEL').click()


2.使用watcher
在程序得开始,启动一个watcher,遇到改元素,就会点击,注意,这个方法在程序结束以后,需要停止Watcher

watcherList = ["ALLOW", "Allow", "Close app", "ALLOW ALL THE TIME", "WHILE USING THE APP"]
for i in watcherList:
    try:

        d.watcher(i).when(i).click()

    except:
        pass

d.watcher.start()

#此处其他处理操作

#最终需要停止,否则导致进程愈来愈多

d.watcher.stop()

```

本人主要编写uiautomagtor2自动化测试工具及脚本,有问题可以随时沟通