為了更方便地進行微信小程序的測試,筆者希望能夠切換進webview進行操作,事件過程中問題特別多一踩一個坑,特此記錄以方便大家共同進步
1)Android版本8.0以上機型get contexts得到webview_undefinded
打開D:\appium\node_modules\appium-android-driver\build\lib\webview-helpers.js
修改adb.shell('ps')為adb.shell(['ps','-A']),8.0以下不需要修改
如果使用的是desktop,那文件在C:\Program Files\Appium\resources\app\node_modules\appium\node_modules\appium-android-driver\build\lib文件夾下
修改之后成功獲取到
2)switch_context到WEBVIEW_com.tencent.mm:tools卡住
解決方法:Step1:添加啟動參數,${chromeOptions} = {'androidProcess': 'com.tencent.mm:tools'}
? ? ? ? ? ? ? ? ? Step2:降低微信版本到6.7.3,后來升上去又沒問題了,具體原因不清楚
做了兩項修改之后切換成功
然而自動化之路并未成功,筆者又踩了一個坑,真的是崩潰啊~~~,下面講第三個坑
3)click element提示無法定位到元素,可是元素就在那里~
使用log_source打印出當前頁面代碼之后,確實不是顯示的這個頁面
解決辦法:switch_context之后需要再切換window_handles,使用robotframework的同學將
_applicationmanagement.py里面switch_to_context的代碼修改如下,切換萬context之后選中最后
一個handle。同程旅游APP還在使用X5內核時與此恰好相反,需要選擇第一個handle,所以不同
APP可能有所不同,讀者自行排查
修改之后重新啟動robotframework,再次運行
查看頁面代碼,發現頁面已經切換正確,click_element執行成功
4)然而click_element執行成功但是click時間并未生效
嘗試使用executescript解決問題,結果提示$ is not defined,與chrome內核不同webview有可能executescript并能不支持執行JS。
推測該元素可能綁定的時Tap事件,使用Tap進行操作。
結果報錯:NoSuchElementException: Message: An element could not be located on the page using the given search parameters
解決方案參照下面連接:
https://www.cnblogs.com/LY-CC/articles/10924469.html
最后換了一種寫法,點擊成功,具體原因完全不知道
5)與Chome內核不同,在webview中截圖,就是會卡死的
解決方案:切換為原生狀態進行截圖,截圖成功之后再切回響應webview
修改Rotbotframework的_screenshot.py文件中capture_page_screenshot方法
修改成功之后,利用原生狀態切圖成功
6)switch-contexe時切到了Chrome上去了,因為安裝了chrome,程序檢測到com.android.chrome會優先獲取chrome的版本,卸載Chrome即可
7)起初執行沒問題,升級微信之后無法點擊元素
不同版本微信元素id不一樣
例如微信的搜索框
6.7.3版本中 id=com.tencent.mm:id/ji
7.0.6中id=com.tencent.mm:id/li