欢迎关注我的Appium知乎专栏:自定义Appium之路
当Appium脚本中的uiautomationName设置为UiAutomator1时,会启动UIAutomator1的Driver来测试你的Appium脚本,在脚本之前之前,会有很多权限框弹出,此时就需要我们的UIAutomator1来自动处理这样的对话框,并且要在安装apk之前就启动UIAutomator1的服务。
很不幸,appium的代码中,是先安装Appium Setting APK和被测应用的,那怎么改呢?
我们找到appium-android-driver工程,找打lib/driver.js,然后找到startAndroidSession方法,将如下代码提到这个方法的最前面:
// start UiAutomator (改动:优先启动UIAutomator1) |
如下图所示:
经过测试,这样不会影响UIAutomator1的正常启动,不会带来负面影响。
既然都优先启动了,我们就要让UIAutomator1去监控手机界面了。
不幸的是,Appium并没有给我们写类似的监听代码,我们得自己动手了,其实很简单,大体思路就是,dump控件树,检测界面控件,检测到权限框,就点”允许”、”是”之类的,这里就需要不断的枚举了。国内手机产商众多,android版本也多,这里就有大量的工作要做了。
幸运的是,Appium给我们做好了监控的线程,只是空实现,基本啥都没干,代码在SocketServer.java的listenForever中:
public void listenForever(boolean disableAndroidWatchers, boolean acceptSSLCerts) throws SocketServerException { |