各位在自动化通过 adb install 或者 pm install 的时候,有没有遇到过华为或者小米或者一加手机的各种安装弹窗呢,除了手动设置,该如何解决呢?

目前自动化主流框架,python uiautomator2 或者 appuim 等在执行测试的时候会自动给手机安装 atx 或者 appuim 引擎,但是如果不手动的点击允许,那么会导致测试失败,这种情况改如果处理呢?

下面提供一种多线程的解决方案,亲测可行
1 个线程执行安装命令,另一个线程通过 dump ui 的方式获取 xml 文件,在通过解析 xml 文件的节点,获取文本,然后遍历 xml,如果存在弹窗,通过 adb 点击坐标点处理掉弹窗上的文本即可

th1 = threading.Thread(target=install_app, args=(id, apk_path))
th2 = threading.Thread(target=click_pop_window_by_xml, args=(id, '继续安装'))

th1.start()
th2.start()
th1.join()
th2.join()
def click_pop_window_by_xml(id, expect_text):
    # ------------------------
    # 由于处理系统安装弹窗,由于ATX UI架构会安装两个apk
    # 安装apk的时候会自动弹窗,所以提前通过adb处理掉
    # ------------------------
    print('开始处理弹窗',threading.current_thread().getName())
    nodes = parse_page_xml(id)
    if nodes is None:
        return
        raise XPathElementNotFoundError("get xml file error")
    for node in nodes:
        actual_text = node.getAttribute('text').encode('utf-8').decode('utf-8')
        x, y = get_node_bounds(node)
        if expect_text == actual_text:
            print('处理弹窗', actual_text)
            click_by_adb(id, x, y)
            break


↙↙↙阅读原文可查看相关链接,并与作者交流