做者:清菡
博客:oschina、雲+社區、知乎等各大平臺都有。git
搜一搜:若是歷來沒有搜索過,在這裏點擊一下它,歷史記錄是空的。可是若是曾經搜索過,那必定有歷史記錄。若是不是第一次點擊它,用自動化腳本再次點擊的話,不會讓你輸入進去,會報錯。github
那就只能從歷史記錄中來選,因此點擊一下後要等到歷史記錄中的信息出來。web
等待搜索框出現-點擊搜索框以後呢,等待了 5 秒鐘。time.sleep(5)
,等待歷史記錄中「必要商城」出來。shell
能夠看到是歷史記錄沒錯,可是歷史記錄它是一個 WebView。小程序
這個 WebView 是微信這個程序的,不屬於小程序,是屬於微信這個應用的。因此這個東西不對外開放,你就沒有辦法知道「必要商城」對應的元素定位是什麼。微信小程序
不知道怎麼辦?它又不是一個完整的元素,要在一個元素上點點點,只能用座標,由於微信不給開 Debug 屬性。微信
用座標,經過 adb 命令執行點擊操做,adb shell input tap 281 205
281 205 是座標點。框架
若是有多個歷史記錄,座標確定會變。本身的手機,保證歷史記錄對應的位置正確就行了。假設測試機也是本身操做,就是測試環境要保持獨立。koa
固然想辦法保證數據是一直都在的。微信中只要搜索過都是有歷史記錄的,並且日常使用的時候不會走這條途徑,不會在這裏搜一搜,直接在首頁搜一搜就行了。編輯器
點擊了必要商城以後,還不夠。座標能夠取百分比,可是要注意百分比要控制好。進入必要商城後,這個地方仍然是個 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 代碼,不須要搞的這麼複雜。
如今是經過 Appium,Python 也有一個 Uiautomator2 這樣的一個第三方庫,不須要經過 Appium,能夠直接和安卓手機通訊。(這是國內某位大神寫的,專門支持 Python 的)
地址:https://github.com/xiaocong/uiautomator
另一種微信小程序、公衆號 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 自動化怎麼作就怎麼作,重點是前面的一些固定的方式。