Appium-context切換問題排查(以微信為例)

為了更方便地進行微信小程序的測試,筆者希望能夠切換進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文件夾下


圖-1

修改之后成功獲取到

圖-2

2)switch_context到WEBVIEW_com.tencent.mm:tools卡住

解決方法:Step1:添加啟動參數,${chromeOptions} = {'androidProcess': 'com.tencent.mm:tools'}

? ? ? ? ? ? ? ? ? Step2:降低微信版本到6.7.3,后來升上去又沒問題了,具體原因不清楚

做了兩項修改之后切換成功

圖-3

然而自動化之路并未成功,筆者又踩了一個坑,真的是崩潰啊~~~,下面講第三個坑

3)click element提示無法定位到元素,可是元素就在那里~

圖-4

使用log_source打印出當前頁面代碼之后,確實不是顯示的這個頁面

解決辦法:switch_context之后需要再切換window_handles,使用robotframework的同學將

_applicationmanagement.py里面switch_to_context的代碼修改如下,切換萬context之后選中最后

一個handle。同程旅游APP還在使用X5內核時與此恰好相反,需要選擇第一個handle,所以不同

APP可能有所不同,讀者自行排查


圖-5

修改之后重新啟動robotframework,再次運行

查看頁面代碼,發現頁面已經切換正確,click_element執行成功

圖-6

4)然而click_element執行成功但是click時間并未生效

嘗試使用executescript解決問題,結果提示$ is not defined,與chrome內核不同webview有可能executescript并能不支持執行JS。

圖-7

推測該元素可能綁定的時Tap事件,使用Tap進行操作。

圖-8

結果報錯: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

最后換了一種寫法,點擊成功,具體原因完全不知道


圖-9

5)與Chome內核不同,在webview中截圖,就是會卡死的

解決方案:切換為原生狀態進行截圖,截圖成功之后再切回響應webview

修改Rotbotframework的_screenshot.py文件中capture_page_screenshot方法

圖-10

修改成功之后,利用原生狀態切圖成功

圖-11

6)switch-contexe時切到了Chrome上去了,因為安裝了chrome,程序檢測到com.android.chrome會優先獲取chrome的版本,卸載Chrome即可

圖-12

7)起初執行沒問題,升級微信之后無法點擊元素


圖-13

不同版本微信元素id不一樣

例如微信的搜索框

6.7.3版本中 id=com.tencent.mm:id/ji

7.0.6中id=com.tencent.mm:id/li

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容