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

beck · July 16, 2019 · Last by beck replied at July 19, 2019 · 1015 hits

背景

使用appium做UI自动化测试

弹窗浮层

问题

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

已知的解决办法

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

最佳回复

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

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

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

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

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

共收到 17 条回复 时间 点赞

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

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

beck #3 · July 17, 2019 作者
cmlanche 回复

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

beck 回复

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

beck #5 · July 17, 2019 作者
秦岭 回复

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

beck #6 · July 17, 2019 作者
cmlanche 回复

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

beck 回复

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

beck #8 · July 17, 2019 作者
cmlanche 回复

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

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

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

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

beck #10 · July 17, 2019 作者
海姆达尔 回复

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

beck 回复

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

beck #12 · July 17, 2019 作者
海姆达尔 回复

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

cmlanche 回复

这就是uiautomator2 watch的思路。

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

beck #16 · July 19, 2019 作者
抓虫 回复

好的,我看看

beck #17 · July 19, 2019 作者
brightHai2 回复

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

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up