首页 > 其他 > 详细

让ChromeDriver支持TouchActions

时间:2016-02-22 01:33:50      阅读:974      评论:0      收藏:0      [点我收藏+]

0x01 背景

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

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

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

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

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

0x02 杀出拦路虎——TouchActions

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

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

技术分享

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

技术分享

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

0x03 万能的Github给出答案

找了一圈,发现有人在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里面的操作了。

让ChromeDriver支持TouchActions

原文:http://www.cnblogs.com/g-song/p/5205972.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!