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

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

作者:清菡
部落格: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,可以直接和Android手機通訊。(這是中國某位大神寫的,專門支援 Python 的)

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

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

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

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

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

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

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

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

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

四、總結

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

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