最近接到页面自动化测试的需求,要求对线上的手机网页进行自动化的测试与监控。
查了一下资料,对比了一下Selendroid、Appium和比较流行的Genymotion,结论如下:
优点:他们都是基于真机或者虚拟机的自动化测试,能够真实模拟用户的操作环境
缺点:真机需要一直将手机连到电脑上,虚拟机的效率又太低,Genymotion的免费版还不能联网……
考虑到平时很少出现兼容性的问题,且手机浏览器都是基于Webkit的,桌面版Chrome也是,所以最终把技术方案定为Java+Selenium+Chrome模拟手机浏览器
根据ChromeDriver的官方文档,很快实现了手机浏览器的模拟,展示、点击、插入JS等玩的不亦乐乎,H5的特性支持的都非常不错。
但是,当模拟触摸事件,开始使用TouchActions的时候,出现了报错:
由于没怎么写过Java,查了下,好像是个类型转换的错误,跟着错误信息,发现是TouchActions.java初始化的时候报错:
认真看了遍官方文档,没找到说法……
找了一圈,发现有人在Github上给Selenium起了一个分支,专门修复这个问题
https://github.com/rovner/selenium/tree/chrome-has-touch-screen
大意是说:为了让ChromeDriver支持TouchActions,要让ChromeDriver实现HasTouchScreen接口
0x04 解决方案
大神的repo里给出了方案,不过对Selenium源码进行了改动,需要自己重新打成jar包才能用。
这里给出我的解决方案:新建一个MobileChromeDriver,继承ChromeDriver并实现HasTouchScreen接口
// a ChromeDriver that enables TouchAction public class MobileChromeDriver extends ChromeDriver implements HasTouchScreen { private RemoteTouchScreen touch; public MobileChromeDriver(Capabilities capabilities) { super(capabilities); touch = new RemoteTouchScreen(getExecuteMethod()); } public TouchScreen getTouch() { return touch; } }
然后把之前调用ChromeDriver都改成调用MobileChromeDriver就可以实现TouchActions里面的操作了。