衩裤角三

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

0x01 背景

最近接到页面自动化测试的需求,要求对线上的手机网页进行自动化的测试与监控。

查了一下资料,对比了一下Selendroid、Appium和比较流行的Genymotion,结论如下:

优点:他们都是基于真机或者虚拟机的自动化测试,能够真实模拟用户的操作环境

缺点:真机需要一直将手机连到电脑上,虚拟机的效率又太低,Genymotion的免费版还不能联网……

考虑到平时很少出现兼容性的问题,且手机浏览器都是基于Webkit的,桌面版Chrome也是,所以最终把技术方案定为Java+Selenium+Chrome模拟手机浏览器

0x02 杀出拦路虎——TouchActions

根据ChromeDriver的官方文档,很快实现了手机浏览器的模拟,展示、点击、插入JS等玩的不亦乐乎,H5的特性支持的都非常不错。

但是,当模拟触摸事件,开始使用TouchActions的时候,出现了报错:

image

由于没怎么写过Java,查了下,好像是个类型转换的错误,跟着错误信息,发现是TouchActions.java初始化的时候报错:

image

认真看了遍官方文档,没找到说法……

0x03 万能的Github给出答案

找了一圈,发现有人在Github上给Selenium起了一个分支,专门修复这个问题

https://github.com/rovner/selenium/tree/chrome-has-touch-screen

image

大意是说:为了让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里面的操作了。

posted on 2016-02-22 00:38  衩裤角三  阅读(2930)  评论(0编辑  收藏  举报