程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 讓ChromeDriver支持TouchActions,webdriveractions

讓ChromeDriver支持TouchActions,webdriveractions

編輯:JAVA綜合教程

讓ChromeDriver支持TouchActions,webdriveractions


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裡面的操作了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved