我膨脹了,測試必要商城小程式,用了 3 種方式!:)

清菡發表於2020-12-05

堅持原創輸出,點選藍字關注我吧

作者:清菡
部落格:oschina、雲+社群、知乎等各大平臺都有。

目錄

  • 一、Appium 結合 Python 做小程式自動化
  • 二、Python 第三方庫 Uiautomator2 做微信小程式、公眾號自動化
  • 三、FAuto Test 微信小程式、公眾號 H5 自動化神器
  • 四、總結

一、Appium 結合 Python 做小程式自動化

搜一搜:如果從來沒有搜尋過,在這裡點選一下它,歷史記錄是空的。但是如果曾經搜尋過,那一定有歷史記錄。如果不是第一次點選它,用自動化指令碼再次點選的話,不會讓你輸入進去,會報錯。

那就只能從歷史記錄中來選,所以點選一下後要等到歷史記錄中的資訊出來。

等待搜尋框出現-點選搜尋框之後呢,等待了 5 秒鐘。time.sleep(5),等待歷史記錄中“必要商城”出來。

可以看到是歷史記錄沒錯,但是歷史記錄它是一個 WebView。

這個 WebView 是微信這個程式的,不屬於小程式,是屬於微信這個應用的。所以這個東西不對外開放,你就沒有辦法知道“必要商城”對應的元素定位是什麼。

不知道怎麼辦?它又不是一個完整的元素,要在一個元素上點點點,只能用座標,因為微信不給開 Debug 屬性。

用座標,通過 adb 命令執行點選操作,adb shell input tap 281 205281 205 是座標點。

如果有多個歷史記錄,座標肯定會變。自己的手機,保證歷史記錄對應的位置正確就好了。假設測試機也是自己操作,就是測試環境要保持獨立。

當然想辦法保證資料是一直都在的。微信中只要搜尋過都是有歷史記錄的,而且平常使用的時候不會走這條途徑,不會在這裡搜一搜,直接在首頁搜一搜就好了。

點選了必要商城之後,還不夠。座標可以取百分比,但是要注意百分比要控制好。進入必要商城後,這個地方仍然是個 WebView,我還是沒有許可權,只能繼續用座標。

但是這個地方座標範圍就很大了,“必要商城-小程式”這一整塊都可以點選,選一箇中間的點,這裡用比例算一下,應該還是可以的。

大概預估一下,在多個機型中試一下,因為這個需要你不斷測試,測試調整百分比基數的,確保你達到一定的成功率。點選進入小程式頁面:

這個地方都可以識別,這個地方其實不屬於微信了。只是通過微信的渠道來訪問到這樣的一個東西。類似於把這個小型 Web 網站系統嵌入到這個裡面來了。

這裡面的內容,在 Web 網頁隨便都能找到的。所以這個地方一進來之後就要切換,但是載入也需要時間。所以載入的時間要稍微等一等。

首頁、我的、分類、購物車是可以作為 App 應用程式識別的。

可以保證首頁、我的、分類、購物車出現,然後 sleep 5 秒鐘,儘量保證中間區域可以載入出來。

這裡用到了 14 秒鐘。10 秒也是可以的,因為這裡比較慢。現在列印當前所有的上下文cons=driver.contexts。列印出來後,要切換到 context,這個時候切換和之前的 WebView 是不一樣的。

列出來的 WebView 名字當中,有 2 個跟騰訊有關的,這個 toolsmp 是我選的,之前有com.tencent.mm:tool。WebView 可能有 2-3 個,只要進入想要的WEBVIEW_com.tencent.mm:toolsmp,這個是我們在這裡指定識別到的程式:

切進來之後,其實就是個小型的應用系統嵌在這裡面來了。那它可能就不止一個視窗了。不像一個頁面中那麼簡單,小程式就複雜一點。

可能不止一個視窗,所以在進來之後,不要著急,不要認為肉眼看到的,當前就在這個頁面。

還需要你先獲取當前的所有視窗控制程式碼,要判斷你要操作的元素是否在當前的頁面當中。如果不在,那就得換一個,因為一個視窗控制程式碼就代表一個頁面。

所以獲取了當前所有的視窗的控制程式碼:hs=driver.window_handles,拿到之後對它做了個遍歷:

for handle in hs:
driver.switch_to.window(handle)
#首先切換到這個視窗當中,因為我不知道哪個視窗包含了我要的元素,切換完成之後,我會判斷一下
#當前這個視窗對應的頁面的原始碼當中,有沒有我要找的。比如視窗中有很多必要商城相關的,可以寫必要商城相關的,各種文字都可以用,比如女裝、美妝啊。
print("切換到視窗:",handle)
time.sleep(3)
#print(driver.page_source)
if driver.page_source.find("熱門") !=-1:
break

如果能找到熱門這個字,那我就認為當前是正在我操作的頁面。然後就不再進行後續遍歷了,因為遍歷的過程中是相當於已經切進來了的,如果當前確實很符合條件,就不再遍歷也不再切換到別的視窗,就在當前視窗。

確定當前操作的視窗頁面是什麼之後,接下來的事就是找元素,操作元素。和 Web 自動化一樣。注意:Chromedriver 要準備好。切換的時候要準備 Chromedriver。

二、Python 第三方庫 Uiautomator2 做微信小程式、公眾號自動化

除了這一種方式之外,還有一種方式。就是純 Python 程式碼,不需要搞的這麼複雜。

現在是通過 Appium,Python 也有一個 Uiautomator2 這樣的一個第三方庫,不需要通過 Appium,可以直接和安卓手機通訊。(這是國內某位大神寫的,專門支援 Python 的)

地址:https://github.com/xiaocong/uiautomator

三、FAuto Test 微信小程式、公眾號 H5 自動化神器

另外一種微信小程式、公眾號 H5 的自動化,就是在這個基礎上做了個封裝。這個叫做FAuto Test

它是基於 Python,但是它有一個缺陷,目前只支援 Python2,還沒有開放到 Python3。

騰訊自己做的開源的框架:https://github.com/Tencent/FAutoTest

可以試下上面官方文件中封裝好的程式碼,可以下載個 2.7 的 Python 裝下,2.7 和 3.4 並不衝突,裝 2 個版本就好了。

但是環境變數,配置一個版本就可以了,不需要把 2.7 配上去,直接配 3.4。

環境變數執行的時候只識別一個。如果你配置了兩個環境變數,只識別前一個,後面那個等於沒有配置是一樣的。

在寫程式碼的時候可以選擇用哪個版本來寫。環境變數配置常用的 3 點幾的版本,2 點幾不用配,直接使用就好了。

四、總結

用 Appium 結合 Python 程式碼,問題比較多,比較尷尬。這個程式碼裡程式名稱比較固定,不太固定是真正在小程式裡操作的是什麼。

但是這個是 Web 自動化。Web 自動化怎麼做就怎麼做,重點是前面的一些固定的方式。

相關文章