最近接到頁面自動化測試的需求,要求對線上的手機網頁進行自動化的測試與監控。
查了一下資料,對比了一下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裡面的操作了。