Appium 有没有办法屏蔽安卓手机的弹窗浮层

beck · 2019年07月16日 · 最后由 beck 回复于 2019年07月19日 · 2916 次阅读

背景

使用 appium 做 UI 自动化测试

弹窗浮层

问题

如上图,有没有办法屏蔽安卓的弹窗浮层呢?因为这个是后台配置的,每次弹出浮层的时间不一样,次数也不一样,而且下面那个关闭的元素定位每次也不同

已知的解决办法

叫安卓单独打个包,去掉这些浮层,但是总感觉比较麻烦,请问有没有更好的办法?

最佳回复

方案 1:如果是用 espresso 来做的话,这个叉叉是可以准确识别的,没有识别不到的情况
方案 2:native 识别 + 图像识别互相补充去识别这个叉叉,兼容性取决于图像识别的能力,难度较高
方案 3:相对识别,先找到上面的大控件,再往下找这个叉叉

提供一个思路:如果点不到要测试的元素(弹窗处在最前面),尝试查看有没有弹窗,如果有就关掉继续做你的测试

1 我的思路是:开发模式中有个观察者模式,如果发现不到理想的空间就上报给监控 watcher, 然后每个 case 注册响应的监控处理就可以了
这个思想办法有点像 uiautomator 的 watcher 组件
应用上的代码就可以完善,框架设计模式优化下,不需要考虑底层的代码

2 笨一点的:多线程,一直轮询
上面的 try 不适合,那抛异常的话就不能继续执行下面的代码了

3 再笨一点就是写个方法,脚本里多次调用看是不是弹出这个

共收到 17 条回复 时间 点赞
beck #17 · 2019年07月19日 Author
brightHai2 回复

看了一下,感觉作用是关闭浮层和返回坐标

方案 1:如果是用 espresso 来做的话,这个叉叉是可以准确识别的,没有识别不到的情况
方案 2:native 识别 + 图像识别互相补充去识别这个叉叉,兼容性取决于图像识别的能力,难度较高
方案 3:相对识别,先找到上面的大控件,再往下找这个叉叉

提供一个思路:如果点不到要测试的元素(弹窗处在最前面),尝试查看有没有弹窗,如果有就关掉继续做你的测试

beck 回复

不定时出现的弹框写个监控去做,全流程测试过程中每隔几秒检测一次(异步)

beck #3 · 2019年07月17日 Author
cmlanche 回复

用的是 uiautomatorviewer,可以准确识别,主要是这个叉叉每次定位都不一样,得写比较多的 try...except 做异常判断,然后这个弹窗什么时候出现,时间也不一定,但是都是在主页,目前是做了三次异常判断

beck #6 · 2019年07月17日 Author
秦岭 回复

目前就是这样处理的。先 try 要点击的元素,再去调用点击弹窗的操作,循环三次,如果中间要点击的元素执行了,再跳出循环。但是有个问题,如果开发配置这个弹窗弹五次或者六次呢,比较麻烦了,又得改循环次数。而且每个弹窗叉叉的元素定位不同,得有比较多的 try...except

beck #12 · 2019年07月17日 Author
cmlanche 回复

能否再详细说明一下呢,比如这个异步处理的监控怎么和 appium 结合

beck 回复

最佳的方式当然是改造 appium 啦,就跟监控权限框一样,参考我 testerhome 专栏,但这个方案应该不适合你,比较复杂。我推荐是写在脚本中,开一个线程去做这件事。

beck #8 · 2019年07月17日 Author
cmlanche 回复

嗯,多谢,线程检测,我试试

1 我的思路是:开发模式中有个观察者模式,如果发现不到理想的空间就上报给监控 watcher, 然后每个 case 注册响应的监控处理就可以了
这个思想办法有点像 uiautomator 的 watcher 组件
应用上的代码就可以完善,框架设计模式优化下,不需要考虑底层的代码

2 笨一点的:多线程,一直轮询
上面的 try 不适合,那抛异常的话就不能继续执行下面的代码了

3 再笨一点就是写个方法,脚本里多次调用看是不是弹出这个

beck #11 · 2019年07月17日 Author
海姆达尔 回复

嗯,其实想做监控来着,奈何代码能力比较差,不知如何下手。线程可以试试,但是多线程,是启动一个 appium 吗,如果一直轮询的话,会对我的 UI 自动化的下一步操作造成影响吗

beck 回复

我觉得监控肯定有坑吧,比如多个进程下每个进程要启动很多线程要要看资源分配,虽然表面上没问题但是并发起来遇见 adb 等卡死,还在在线程中做修饰器处理
要是观察觉得好点,其实你看看设计模式就知道了
case 继承,注册的就搞定了

beck #13 · 2019年07月17日 Author
海姆达尔 回复

嗯,多谢指点。《Head First 设计模式》买了很久了,一直没翻。是时候好好看看了

匿名 #13 · 2019年07月17日
cmlanche 回复

这就是 uiautomator2 watch 的思路。

可以在每个脚本执行前加个判断的,这应该不难吧,有一种设计模式叫代理模式,可以试试

beck #17 · 2019年07月19日 Author
抓虫 回复

好的,我看看

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册