由扯淡篇我們知道了關于appium在windows下的出裝順序:
- Python環境:Python3.6.6, 或者别的3.x版本。你可以在下面的百度雲連結中下載下傳,推薦Python3.5以上,為了友善編寫代碼,還需要安裝PyCharm IDE(可選,也可以vs code)。
- node.js。
- Java環境:要求是java jdk 1.8及以上。
- appium。
- Android SDK。
- 手機/模拟器:可以是夜神模拟器或者是其他的。
- Appium-Python-Client。
我的環境是:
win 10 專業版
Java jdk1.8
Python3.6.6
PyCharm2018.1
小米手機5S/夜神模拟器6.0.7.5
appium:1.7
appium for win 全家桶百度雲連結:
連結:https://pan.baidu.com/s/1q7uEdv9YHxG-LRzJ20I3cQ 提取碼:iq52
開始安裝吧。
Python for Windows
參考:https://www.cnblogs.com/Neeo/p/10864123.html#python
Node.js for Windows
參考:https://www.cnblogs.com/Neeo/articles/11637320.html
JAVA JDK for Windows
參考:https://www.cnblogs.com/Neeo/articles/11954283.html
Appium安裝
appium支援用戶端和終端方式進行安裝,這裡為了友善,我們選擇用戶端的方式安裝。
appium桌面版安裝
下載下傳與安裝
Gighub位址:https://github.com/appium/appium-desktop/releases
下載下傳到本地是個exe可執行檔案,輕按兩下exe檔案,一路預設安裝即可。
測試
打開appium軟體之後。

如上圖,在
simple
欄,預設監聽
0.0.0.0
和
4723
端口,這裡我們将host改為
127.0.0.1
,然後點選
start server
。
可以看到,啟動了一個HTTP服務,監聽本機的
127.0.0.1:4723
,這個時候就可以使用浏覽器位址欄通路了。
右上側的三個圖示分别是啟動、下載下傳日志、停止服務。
此時,說明appium安裝成功。具體使用,我們後面再說。
appium終端安裝
Windows平台啊(說多了都是淚),很可能由于這樣或那樣的問題導緻安裝失敗,是以,這裡提供了兩套方式安裝(其實就是指令不同,但大同小異)方案。
為慮勝先慮敗,先來說怎麼解除安裝(我就一不小心安裝了最新版...):
npm uninstall -g appium
# 完事在安裝指定版本
npm install -g [email protected] # 指定版本
Plan A
終端安裝(使用的是國外的源):
npm install -g appium
npm install -g [email protected] # 指定版本
很大可能被牆導緻安裝失敗,so,淘寶鏡像考慮一下。
PS:根據需要選擇最新版還是指定版本,看好了再粘貼。
# 預設安裝最新版的
npm --registry http://registry.npm.taobao.org install appium -g
# 安裝指定版本appium
npm --registry http://registry.npm.taobao.org install [email protected] -g
安裝指定版本的可能失敗......不要怕,你可能連第一條指令都執行失敗....
安裝appium-doctor檢測:
npm --registry http://registry.npm.taobao.org install appium-doctor -g
驗證:
appium-doctor
PS:我使用這個指令是失敗的,but,anyway.......
啟動appium驗證:
C:\Users\Anthony>appium
[Appium] Welcome to Appium v1.15.1
[Appium] Appium REST http interface listener started on 0.0.0.0:4723
OK,安裝成功。
很可能你按照這套流程安裝失敗了.....
來看備用Plan B方案。
Plan B
使用cnpm安裝,首先要先配置淘寶鏡像的cnpm:
npm install -g cnpm --registry=https://registry.npm.taobao.org
# 示例
C:\windows\system32>npm install -g cnpm --registry=https://registry.npm.taobao.org
C:\Users\Anthony\AppData\Roaming\npm\cnpm -> C:\Users\Anthony\AppData\Roaming\npm\node_modules\cnpm\bin\cnpm
+ [email protected]
added 354 packages, removed 363 packages, updated 144 packages and moved 3 packages in 37.303s
這一步沒問題的話,驗證是否安裝成功:
cnpm -v
C:\windows\system32>npm -v
5.5.1
我的cnpm版本是5.5.1。
接下來,使用cnpm安裝appium:
cnpm install -g appium
cnpm install -g [email protected]
# cnpm install -g appium-doctor # 安裝與否無所謂,我反正是按照成功執行失敗
啟動appium
appium -p 4700 -bp 4701 -U 127.0.0.1:62001 --no-reset --session-override
參數說明:
-
是appium監聽端口。-p
-
是bootstrap的監聽端口。-bp
-
(U大寫)是可用的裝置,也就是-U
傳回的裝置清單。adb devices
-
即可避免執行用例的時候再次安裝app。--no-reset
-
不必每次重新開機session。--session-override
示例:
C:\windows\system32>appium -p 4700 -bp 4701 -U 127.0.0.1:62001 --no-reset --session-override
[Appium] Welcome to Appium v1.15.1
[Appium] Non-default server args:
[Appium] port: 4700
[Appium] bootstrapPort: 4701
[Appium] sessionOverride: true
[Appium] udid: 127.0.0.1:62001
[Appium] noReset: true
[Appium] Deprecated server args:
[Appium] -U,--udid => --default-capabilities '{"udid":"127.0.0.1:62001"}'
[Appium] --no-reset => --default-capabilities '{"noReset":true}'
[Appium] Default capabilities, which will be added to each request unless overridden by desired capabilities:
[Appium] udid: 127.0.0.1:62001
[Appium] noReset: true
[Appium] Appium REST http interface listener started on 0.0.0.0:4700
要是還是安裝不成功......還是考慮下是否需要喝杯熱茶思考一下人生吧!
Nox for Windows
參考:https://www.cnblogs.com/Neeo/articles/11601845.html
Android SDK for windows
SDK:(software development kit)軟體開發工具包。被軟體開發工程師用于為特定的軟體包、軟體架構、硬體平台、作業系統等建立應用軟體的開發工具的集合。是以,Android SDK 指的是Android專屬的軟體開發工具包。
下載下傳安裝
官網下載下傳位址:https://www.androiddevtools.cn/
- 下載下傳一個SDK Tools。
- 除此之外,還需要一些其他的依賴包,比如SDK Platform-Tools、Build-Tools等。
- 為了簡單,請使用之前提供的全家桶内提供的軟體包。
你以為解壓完了就沒事了?沒完,還有環境變量需要添加。
我本機将壓縮包解壓到了
G:\software\andriod-sdk-windows
這個目錄。
那麼,我們需要将這個目錄下的:
G:\software\andriod-sdk-windows\tools
G:\software\andriod-sdk-windows\platform-tools
G:\software\andriod-sdk-windows\build-tools\27.0.1
如上示例的三個目錄,一一添加到環境變量中。
終端輸入
adb
測試:
出現一大堆指令提示符就OK啦。
Android SDK tools
首先,這個時候,你的Python環境、Java JDK環境、夜神模拟器、android sdk、appium環境都是配置好的。
再來看都有哪些指令吧,這個時候,請啟動夜神模拟器。
然後找個apk測試,比如說京東APP,我們從官網把它下載下傳到電腦上:
官網:https://app.jd.com/android.html
下載下傳位址:https://storage.360buyimg.com/jdmobile/JDMALL-PC2.apk
我們将apk下載下傳到本地的某個目錄,比如桌面。
我們要牢記三個指令和一個工具的使用。
首先在
G:\software\andriod-sdk-windows\tools
目錄下:
- aapt指令,用來檢測apk的包名和activity名稱。
- uiautomatorviewer.bat檔案是Android SDK自帶的一個元素定位工具,我們後續會用到它。
在
G:\software\andriod-sdk-windows\platform-tools
目錄中:
- adb( Android Debug Bridge)指令,也就是android調試橋。也就是調試用的指令工具。
aapt
先來看aapt指令。
C:\Users\Anthony>aapt dump badging apk包路徑
# 也可以簡寫為
C:\Users\Anthony>aapt d badging apk包路徑
在一串的傳回結果中,我們要重點關注兩個點:
C:\Users\Anthony>aapt d badging C:\Users\Anthony\Desktop\JDMALL-PC2.apk
activity name='com.jingdong.app.mall.main.MainActivity' # activity名稱
package: name='com.jingdong.app.mall' # apk包名
記住它們,後續都能用上。
adb
PS:首先來說一個我遇到的坑,每次使用
adb connect
連接配接夜神模拟器後,都需要重新開機模拟器才能進行Python腳本操作。
再來看adb都有哪些指令。
檢視版本
C:\Users\Anthony>adb version
Android Debug Bridge version 1.0.36
Revision 0e9850346394-android
連接配接可用的裝置(手機/模拟器)
我們知道夜神模拟器監聽本機的62001(或者52001)端口,是以,我們使用adb指令去連接配接它。
C:\Users\Anthony>adb connect 127.0.0.1:62001
connected to 127.0.0.1:62001
沒有問題,就是連接配接成功。
檢查裝置(手機/模拟器)是否可用
C:\Users\Anthony>adb devices
List of devices attached
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
這個提示是說明夜神模拟器沒有打開,因為沒有可用的可連接配接裝置。
現在,我們将夜神模拟器啟動後,再執行這條指令:
C:\Users\Anthony>adb devices
List of devices attached
127.0.0.1:62001 device
現在有了一個可用的裝置,我們知道這個裝置是夜神模拟器。現在連接配接上這個裝置後就可以執行一些操作了。
安裝APP
給電腦上的android模拟器/夜神模拟器安裝APP,這裡還是以我們之前的京東APP,終端輸入:
adb install app APP路徑位址
# 示例, 安裝京東apk
C:\Users\Anthony>adb install C:\Users\Anthony\Desktop\JDMALL-PC2.apk
[100%] /data/local/tmp/JDMALL-PC2.apk
pkg: /data/local/tmp/JDMALL-PC2.apk
Success
C:\Users\Anthony>
使用adb指令将裝置安裝到指定裝置,适用于多個裝置同時存在的情況。
# 安裝
adb -s 裝置号 install apk安裝包路徑
# 解除安裝
adb -s 裝置号 uninstall package包名
再來學習一個指令:
abd install -r JDMALL-PC2.apk
安裝apk到sd卡。
解除安裝APP
首先要知道APP的包名,當然,不是APP的名字,而是使用
aapt
檢視出來的包名
com.jingdong.app.mall
C:\Users\Anthony>adb uninstall com.jingdong.app.mall
Success
下面的指令是解除安裝APP但保留資料和緩存檔案:
adb uninstall -k com.jingdong.app.mall
啟動/停止Server
一般來說,下面兩個指令基本不會用到,因為隻要裝置連接配接正确,會自動啟動 adb server 的,不過大家也需要知道這倆指令:
# 啟動
adb start-server
# 停止
adb kill-server
列出手機中裝的所有APP的包名
adb shell pm list packages
列出系統應用的所有包名
adb shell pm list packages -s
列出第三方應用包名(排除系統應用的)
adb shell pm list packages -3
清除應用資料及緩存
adb shell pm clear <package name>
# 示例
C:\Users\Anthony>adb shell pm clear com.jd.app.reader
Success
uiautomatorviewer.bat
uiautomatorviewer是android SDK自帶的一個元素定位工具。通過截屏并分析XML布局檔案的方式,為使用者提供控件資訊檢視服務。
使用uiautomatorviewer,你可以檢查一個應用的UI來檢視應用的布局群組件以及相關的屬性。該工具位于SDK目錄下的tools\bin子目錄下。
由于我們将
G:\software\andriod-sdk-windows\tools
目錄添加到環境變量,是以我們直接可以在終端中執行這個檔案。
C:\Users\Anthony>uiautomatorviewer.bat
如果沒有添加環境變量,你也可以從上述的目錄中找到它,輕按兩下就OK了。
啟動之後是這樣的:
此時,如果你的模拟器或者手機已經連接配接就緒,那麼可以點選
Devices Screenshot
按鈕進行重新整理頁面。
現在,可以看到關于京東閱讀啟動頁面的布局已經呈現在我們眼前,你就可以根據元素搞些事情了。
注意:這裡可能有坑,就是用uiautomatorviewer的時候最好關閉appium的監聽連接配接,否則會報錯Error obtaining UI hierarchy
這是因為當我們通過腳本通路apk時,由于appium也在通路SDK的工具,而此時uiautomatorviewer也去調用SDK的工具,這會引起端口沖突,是以,當使用uiautomatorviewer時,請斷開appium的連接配接.......别問為什麼,我也好煩
重要的操作
為了友善使用夜神模拟器,這裡需要對Android SDK和夜神模拟器做一些配置。
将
G:\software\andriod-sdk-windows\platform-tools\adb.exe
檔案拷貝到夜神模拟器的啟動目錄
G:\software\Nox\bin
下,并重命名為
nox_adb.exe
但是夜神模拟器的啟動目錄下已經有了
nox_adb.exe
檔案,沒關系,我們将它備份一下即可。
這裡隻是将原檔案備份為
.bak
檔案,你也可以以其他形式備份,都OK的。
另外,可能由于夜神模拟器的版本不同,啟動目錄也不相同,這點需要注意。
最後,你可能會問,為什麼要多這麼一步操作,是因為,當啟動夜神模拟器後,它會啟動
nox_adb.exe
檔案,而這個檔案已經被我們偷梁換柱替換為android SDK的
adb.exe
檔案。在後續的appium連接配接操作android SDK的某些功能時,就能無縫的操作夜神模拟器了,夜神模拟器相對于android SDK,它相對簡單,運作速度更快一些。
Appium-Python-Client
Python想要操作appium,就要有專門的的連接配接庫,這個庫需要下載下傳:
pip install appium-python-client # 也可下載下傳指定版本:0.47
Python 3.6.2 (v3.6.2:5fd33b5, Jul 8 2017, 04:14:34) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import appium
>>>
不報錯就是成功。
第一個測試用例
下載下傳/解除安裝APP
當所有的環境與工具都準備好之後。我們就開始學習怎麼操作吧。
- 首先打開夜神模拟器。
- 打開電腦終端(cmd)。使用
指令連接配接模拟器。并測試是否連接配接成功。adb
用到的兩個指令:
adb connect ip:port # 連接配接模拟器
adb devices # 檢測手機/模拟器是否可用
- 安裝/解除安裝一個APP。
用到的指令:
adb install apk檔案路徑
adb uninstall apk包名
aapt d badging apk檔案路徑 # 擷取apk檔案包名
注意,解除安裝時的包名不是本地的apk檔案名,而是包名,如果不清楚,可以使用指令擷取。
C:\Users\Anthony>adb install C:\Users\Anthony\Desktop\jdread_guanwang_release.apk
[100%] /data/local/tmp/jdread_guanwang_release.apk
pkg: /data/local/tmp/jdread_guanwang_release.apk
Success
C:\Users\Anthony>aapt d badging C:\Users\Anthony\Desktop\jdread_guanwang_release.apk
package: name='com.jd.app.reader' versionCode='1011102'
C:\Users\Anthony>adb uninstall com.jd.app.reader
Success
由
aapt
指令擷取到了包名,然後就可以使用
adb
指令進行安裝和解除安裝了。
這個過程我們可以在夜神模拟器中看到效果。
完事,我們繼續将京東閱讀的APP安裝到夜神模拟器中去,友善後續的操作。
接下來,我們要來點代碼了。
比如說如何通過Python代碼啟動APP。
首先,打開appium連接配接上android SDK(展示效果由夜神模拟器呈現)。在連接配接過程中,需要一些必要的參數,需要我們提前擷取。
platformName
平台名稱,一般都是android平台,是以,直接寫android即可。
platformVersion
如果你是android平台,你要告訴appium使用的android版本。
deviceName
手機裝置名稱,通過
adb devices
指令檢視(連接配接以後才能看見的)
appPackage && appActivity
appPackage:apk包名。
appActivity:apk的launcherActivity。
都可以通過
aapt
指令找到:
C:\Users\Anthony>aapt d badging C:\Users\Anthony\Desktop\jdread_guanwang_release.apk
package: name='com.jd.app.reader' versionCode='1011102'
launchable activity name='com.jingdong.app.reader.logo.JdLogoActivity'label='' icon=''
然後,打開appium,并且修改host,然後點選啟動服務。
完事點選
Start Inspector Session
進行必要的配置。
接下,開始配置json資料。
将之前的幾個參數一一添加進去即可。然後也可以使用
Save
儲存起來。
儲存後下次就可以繼續使用了。
Start Session
開始連接配接。
出現這個畫面就說明appium成功連接配接上了android SDK,并且夜神模拟器也成功打開了京東閱讀。
用Python打開APP
此時,我們将夜神模拟器保持預設開啟狀态,appium監聽
127.0.0.1:4723
即可。
然後編輯Python代碼:
from appium import webdriver
desired_caps = {
"platformName": "android",
"platformVersion": "4.4.2",
"deviceName": "127.0.0.1:62001",
"appPackage": "com.jd.app.reader",
"appActivity": "com.jingdong.app.reader.logo.JdLogoActivity"
}
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)

simple
0.0.0.0
4723
127.0.0.1
start server
127.0.0.1:4723
npm uninstall -g appium
# 完事在安裝指定版本
npm install -g [email protected] # 指定版本
npm install -g appium
npm install -g [email protected] # 指定版本
# 預設安裝最新版的
npm --registry http://registry.npm.taobao.org install appium -g
# 安裝指定版本appium
npm --registry http://registry.npm.taobao.org install [email protected] -g
npm --registry http://registry.npm.taobao.org install appium-doctor -g
appium-doctor
C:\Users\Anthony>appium
[Appium] Welcome to Appium v1.15.1
[Appium] Appium REST http interface listener started on 0.0.0.0:4723
npm install -g cnpm --registry=https://registry.npm.taobao.org
# 示例
C:\windows\system32>npm install -g cnpm --registry=https://registry.npm.taobao.org
C:\Users\Anthony\AppData\Roaming\npm\cnpm -> C:\Users\Anthony\AppData\Roaming\npm\node_modules\cnpm\bin\cnpm
+ [email protected]
added 354 packages, removed 363 packages, updated 144 packages and moved 3 packages in 37.303s
cnpm -v
C:\windows\system32>npm -v
5.5.1
cnpm install -g appium
cnpm install -g [email protected]
# cnpm install -g appium-doctor # 安裝與否無所謂,我反正是按照成功執行失敗
appium -p 4700 -bp 4701 -U 127.0.0.1:62001 --no-reset --session-override
-
-p
-
-bp
-
-U
adb devices
-
--no-reset
-
--session-override
C:\windows\system32>appium -p 4700 -bp 4701 -U 127.0.0.1:62001 --no-reset --session-override
[Appium] Welcome to Appium v1.15.1
[Appium] Non-default server args:
[Appium] port: 4700
[Appium] bootstrapPort: 4701
[Appium] sessionOverride: true
[Appium] udid: 127.0.0.1:62001
[Appium] noReset: true
[Appium] Deprecated server args:
[Appium] -U,--udid => --default-capabilities '{"udid":"127.0.0.1:62001"}'
[Appium] --no-reset => --default-capabilities '{"noReset":true}'
[Appium] Default capabilities, which will be added to each request unless overridden by desired capabilities:
[Appium] udid: 127.0.0.1:62001
[Appium] noReset: true
[Appium] Appium REST http interface listener started on 0.0.0.0:4700
G:\software\andriod-sdk-windows
G:\software\andriod-sdk-windows\tools
G:\software\andriod-sdk-windows\platform-tools
G:\software\andriod-sdk-windows\build-tools\27.0.1
adb
G:\software\andriod-sdk-windows\tools
G:\software\andriod-sdk-windows\platform-tools
C:\Users\Anthony>aapt dump badging apk包路徑
# 也可以簡寫為
C:\Users\Anthony>aapt d badging apk包路徑
C:\Users\Anthony>aapt d badging C:\Users\Anthony\Desktop\JDMALL-PC2.apk
activity name='com.jingdong.app.mall.main.MainActivity' # activity名稱
package: name='com.jingdong.app.mall' # apk包名
adb connect
C:\Users\Anthony>adb version
Android Debug Bridge version 1.0.36
Revision 0e9850346394-android
C:\Users\Anthony>adb connect 127.0.0.1:62001
connected to 127.0.0.1:62001
C:\Users\Anthony>adb devices
List of devices attached
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
C:\Users\Anthony>adb devices
List of devices attached
127.0.0.1:62001 device
adb install app APP路徑位址
# 示例, 安裝京東apk
C:\Users\Anthony>adb install C:\Users\Anthony\Desktop\JDMALL-PC2.apk
[100%] /data/local/tmp/JDMALL-PC2.apk
pkg: /data/local/tmp/JDMALL-PC2.apk
Success
C:\Users\Anthony>
# 安裝
adb -s 裝置号 install apk安裝包路徑
# 解除安裝
adb -s 裝置号 uninstall package包名
abd install -r JDMALL-PC2.apk
aapt
com.jingdong.app.mall
C:\Users\Anthony>adb uninstall com.jingdong.app.mall
Success
adb uninstall -k com.jingdong.app.mall
# 啟動
adb start-server
# 停止
adb kill-server
adb shell pm list packages
adb shell pm list packages -s
adb shell pm list packages -3
adb shell pm clear <package name>
# 示例
C:\Users\Anthony>adb shell pm clear com.jd.app.reader
Success
G:\software\andriod-sdk-windows\tools
C:\Users\Anthony>uiautomatorviewer.bat
Devices Screenshot
G:\software\andriod-sdk-windows\platform-tools\adb.exe
G:\software\Nox\bin
nox_adb.exe
nox_adb.exe
.bak
nox_adb.exe
adb.exe
pip install appium-python-client # 也可下載下傳指定版本:0.47
Python 3.6.2 (v3.6.2:5fd33b5, Jul 8 2017, 04:14:34) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import appium
>>>
-
adb
adb connect ip:port # 連接配接模拟器
adb devices # 檢測手機/模拟器是否可用
adb install apk檔案路徑
adb uninstall apk包名
aapt d badging apk檔案路徑 # 擷取apk檔案包名
C:\Users\Anthony>adb install C:\Users\Anthony\Desktop\jdread_guanwang_release.apk
[100%] /data/local/tmp/jdread_guanwang_release.apk
pkg: /data/local/tmp/jdread_guanwang_release.apk
Success
C:\Users\Anthony>aapt d badging C:\Users\Anthony\Desktop\jdread_guanwang_release.apk
package: name='com.jd.app.reader' versionCode='1011102'
C:\Users\Anthony>adb uninstall com.jd.app.reader
Success
aapt
adb
adb devices
aapt
C:\Users\Anthony>aapt d badging C:\Users\Anthony\Desktop\jdread_guanwang_release.apk
package: name='com.jd.app.reader' versionCode='1011102'
launchable activity name='com.jingdong.app.reader.logo.JdLogoActivity'label='' icon=''
Start Inspector Session
Save
Start Session
from appium import webdriver
desired_caps = {
"platformName": "android",
"platformVersion": "4.4.2",
"deviceName": "127.0.0.1:62001",
"appPackage": "com.jd.app.reader",
"appActivity": "com.jingdong.app.reader.logo.JdLogoActivity"
}
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)