自動化環境搭建
1、安裝Appium
2、安裝client程式設計庫
自動化程式需要呼叫客戶端庫和 Appium Server 進行通訊。
用pip安裝:pip install appium-python-client
3、安裝Appium Server
Appium Server 是用 nodejs 執行的,基於js開發出來的。
Appium組織為了方便大家安裝使用,製作了一個可執行程式 Appium Desktop,(Appium Desktop官方下載:https://github.com/appium/appium-desktop/releases/tag/v1.18.0-2)
把 nodejs 執行環境、Appium Server 和一些工具 打包在裡面了,只需要簡單的下載安裝就可以了。
連結:https://pan.baidu.com/s/1okAYwfnUaFcCm0A18Mq-Mw
提取碼:bgod
4、安裝JDK
上面給出的百度網盤連線 下載安裝:jdk-8u211-windows-x64.exe
安裝好之後,還需要新增一個環境變數JAVA_HOME
,指定 值 為 jdk安裝目錄
JAVA_HOME d:\tools\java\jdk1.8.0_211
5、安裝 Android SDK
對於安卓APP的自動化,Appium Server 是需要 Android SDK的。
因為要用到裡面的一些工具,比如 要執行命令設定手機、傳送檔案、安裝應用、檢視手機介面等。
上面給出的百度網盤連線 下載最新的 Android SDK檔案包:androidsdk.zip
,並且解壓,即可
解壓完成後,需要 配置一下 新增一個 環境變數ANDROID_HOME
,設定值為sdk包解壓目錄,比如d:\tools\androidsdk
另外,還推薦大家配置環境變數 PATH ,加入 adb所在目錄,d:\tools\androidsdk\platform-tools\
注意:是新增
該目錄到環境變數PATH中,!!!不是替換!!!
,否則會導致系統命令都找不到的嚴重後果
6、
連線手機
述的軟體環境都準備好以後,要自動化手機APP,需要:
-
在你執行程式的電腦上 用 USB線 連線上 你的安卓手機
-
進入
手機設定
->關於手機
,不斷點選版本號
選單(7次以上), -
退出到上級選單,在開發者模式中,啟動USB除錯
如果手機連線USB線後,手機介面彈出 類似 如下提示。(選擇 允許USB除錯)
注意:
有的手機系統,可能需要一些額外的選項需要設定好。
比如,有的手機,開發者選項裡 需要開啟允許通過USB安裝應用
等。
總之,給USB開發除錯 儘可能方便的控制手機。
連線好以後,開啟命令列視窗, 執行adb devices -l
命令來列出連線在電腦上的安卓裝置。
表示電腦上可以檢視到 連線的裝置,就可以執行自動化程式了。
7、一個例子
執行程式碼前,要先執行 Appium Desktop
查詢 應用 Package 和 Activity
沒有apk
如果你應用已經安裝在手機上了,可以直接開啟手機上該應用,進入到你要操作的介面
然後執行:adb shell dumpsys activity recents | find "intent={"
會顯示如下,最近的 幾個 activity 資訊,
其中第一行就是當前的應用,我們特別關注最後
應用的package名稱就是tv.danmaku.bili
應用的啟動Activity就是.ui.splash.SplashActivity
有apk
如果你已經獲取到了 apk,在命令列視窗執行:
d:\tools\androidsdk\build-tools\29.0.3\aapt.exe dump badging d:\tools\apk\bili.apk | find "package: name="
輸出資訊中,就有應用的package名稱
package: name='tv.danmaku.bili' versionCode='5531000' versionName='5.53.1' platformBuildVersionName='5.53.1' compileSdkVersion='28' compileSdkVersionCodename='9'
在命令列視窗執行:
d:\tools\androidsdk\build-tools\29.0.3\aapt.exe dump badging d:\tools\apk\bili.apk | find "launchable-activity"
輸出資訊中,就有應用的啟動Activity
launchable-activity: name='tv.danmaku.bili.ui.splash.SplashActivity' label='' icon=''