去年做的ui自动化项目,到现在公司早已经弃用了。想着当时踩了很多坑,现在回顾记录一下。首先是gradle的配置
看到了lib里有个弃用的java-client5+版本的jar包。
这个我主要想说的是,当时原本采用了最新的java-client和selenium包,好像是selenium3.2+的,记不清了。具体是哪个包的哪些api做了修改我记不清了,有兴趣的朋友可以自己去查。我能记得的有些api用法做了更改,比如swipe好像就不支持了。网上找的几个封装的都是旧版本的,我做了些修改。比如
通过touchaction来实现这个swipe功能。顺带说一下最新的包这个action用法也有区别,可以看到我注释掉了一个Duration,这是新旧包waitaction的参数的差别(主要是秒和毫秒的差别可以说)。
好的这不是我要说的重点。重点是下面这个:
这个方法里查到的控件,显示的转换会报错,提示不能强转类型。查了一些资料发现,是高版本做了一些限定,严格限制了这个类型转换。我做了一些尝试,这个转换以我的能力没办法绕过去。其实在后来发现当时可以没必要非要这么执着这个显示等待调用的方式,比如
可以通过对隐式等待方式的修改拓展来实现显示等待的功能,思路简单描述一下就是每隔1s去调用隐式等待,如果没找到就抛了异常,catch住这个异常接着调用,一直循环直到到了设置的等待总时长,或者找到了这个控件为止。当然这是后话了。
所以当时查了资料以后,试了几个版本的包,最终选用了现在用的包。
项目结构大概贴一下吧,源码就不上了,而且很多封装有大牛写好了都能搜到的。
AndroidDriverWait 和ExpectedCondition是显示等待的封装,Assertion的两个是断言可以继续调用的封装(好像testng里有softassert软断言就是这个功能)剩下就是pageobject模式的封装了。总之也是参(抄)考了很多封装就是了。
在使用appium的过程中,经常遇到一些莫名其妙的问题,比如最头疼的有时候用着用着突然就不能识别到当前的页面的元素了,同样的case情况下用uiautomator却正常识别。总之还是用着很不稳定吧可以算。就记录这些吧。