Macaca autoAcceptAlerts的一些问题

用法

  • 在option里加autoAcceptAlerts: true后,就会自动关闭系统弹窗
const iosStuOpts = {
    platformName: 'iOS',
    autoAcceptAlerts: true,
    reuse: 2,
    udid: 'xxxxxxx',
    bundleId: 'xxxxxxx',
};
const androidOpts = {
    platformName: 'Android',
    autoAcceptAlerts: true,
    reuse: 2,
    isWaitActivity: true,
    package: 'xxxxxx',
    activity: 'xxxxxx'
};

问题一

  • 发现有时候关闭系统弹窗的左边选项,有时候关闭系统弹窗的右边选项
  • 找到源码:
    macaca代码
    可以看到是发了一个请求 给xctestwd  然后由xctestwd处理的
  • 可以看到是发了一个请求 给xctestwd 然后由xctestwd处理的,再去打开xctestwd
    在这里插入图片描述
  • 搜索刚才看到的那个请求的url 然后一步一步可以走到真正处理弹窗的地方
    • 发现如果是alert类型,就点第二个(比如允许权限之类的)
    • 否则第一个(dialog、view之类的)

问题二

  • 不是所有弹窗都会被点掉
    • 遇到一个安卓“我知道了”弹窗不能被点掉,这类弹窗则需要找到元素手动点掉

问题三

  • 将 iOS 的 aotuoAcceptAlerts 设置成 false,iOS首次安装应用后启动app会请求系统权限弹窗“不允许”“好”之类的元素用elementByName(‘好’)找不到的问题
    在这里插入图片描述

  • 用appium 试了一下,driver.findElementByAccessibilityId(“好”) 可以点击"好",用tap试了一下,那为什么macaca找不到系统弹窗上的“好”呢?
    在这里插入图片描述

  • 最终发现为什么 autoAcceptAlerts 可以找到系统弹窗上的“好”呢?因为它自己创建了一个单独的application,叫 “com.apple.springboard” 应该就是那个弹窗,而 elementByxxxx 找的时候找的是被测试的 application 所以找不到系统弹窗“好”

在这里插入图片描述

问题四

  • 对于不想设置 autoAcceptAlerts: true 又想将系统弹窗关闭的 iOS设备怎么办?
  • 使用acceptAlert(),并加上try catch,如果没有弹窗时程序也不中断
  • 如果弹窗个数多,可以增加一个for循环
// 关闭系统弹窗
async function closeSystemDialog(driver) {
    try {
        await driver.acceptAlert()
    }
    catch (error) {
        console.log(error)
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值