本教程講解如何使用Appium進(jìn)行手機(jī)應(yīng)用的自動化。
學(xué)習(xí)本課程前,強(qiáng)烈推薦先學(xué)習(xí) Selenium Web 自動化課程
點擊這里,邊看視頻講解,邊學(xué)習(xí)以下內(nèi)容
Appium
是一個移動 App (手機(jī)應(yīng)用)自動化工具。
手機(jī)APP 自動化有什么用?
自動化完成一些重復(fù)性的任務(wù)
比如微信客服機(jī)器人
爬蟲
就是通過手機(jī)自動化爬取信息。
為什么不通過網(wǎng)頁、HTTP 爬取呢?有的系統(tǒng)沒有網(wǎng)頁,也不方便通過HTTP爬取
自動化測試
很多企業(yè)里面有這樣的需求
Appium
自動化方案的特點:
開源免費
支持多個平臺
iOS (蘋果)、安卓 App 的自動化都支持。
支持多種類型的自動化
支持 蘋果、安卓 應(yīng)用 原生界面 的自動化
支持 應(yīng)用 內(nèi)嵌 WebView 的自動化
支持 手機(jī)瀏覽器 中的 web網(wǎng)站自動化
支持 flutter 應(yīng)用的自動化
支持多種編程語言
像 Selenium 一樣, 可以用多種編程語言 調(diào)用它 開發(fā)自動化程序。
我們先來看一下Appium自動化的原理圖
這圖是不是很眼熟?
對啦,和Selenium 原理圖很像。因為 Appium自動化架構(gòu)就是借鑒的Selenium。
大家看看這幅圖, 包含了 3個主體部分 : 自動化程序、Appium Server、移動設(shè)備
自動化程序
自動化程序是由我們來開發(fā)的,實現(xiàn)具體的 手機(jī)自動化 功能。
要發(fā)出具體的指令控制手機(jī),也需要使用 客戶端庫。
和Selenium一樣,Appium 組織 也提供了多種編程語言的客戶端庫,包括 java,python,js, ruby等,方便不同編程語言的開發(fā)者使用。
我們需要安裝好客戶端庫,調(diào)用這些庫,就可以發(fā)出自動化指令給手機(jī)。
Appium Server
Appium Server 是 Appium 組織開發(fā)的程序,它負(fù)責(zé)管理手機(jī)自動化環(huán)境,并且轉(zhuǎn)發(fā) 自動化程序的控制指令 給 手機(jī),并且轉(zhuǎn)發(fā) 手機(jī)給 自動化程序的響應(yīng)消息。
手機(jī)設(shè)備
我們這里說的手機(jī)設(shè)備,其實不僅僅是手機(jī),包括所有 蘋果、安卓的移動設(shè)備,比如:手機(jī)、平板、智能手表等。
為了直觀方便的講解,這里我們簡稱: 手機(jī)
當(dāng)然手機(jī)上也包含了 我們要自動化控制的 手機(jī)應(yīng)用APP。
手機(jī)設(shè)備為什么能 接收并且處理自動化指令呢?
因為,Appium Server 會在手機(jī)上 安裝一個 自動化代理程序, 代理程序會等待自動化指令,并且執(zhí)行自動化指令
比如:要模擬用戶點擊界面按鈕,Appium 自動化系統(tǒng)的流程是這樣的:
自動化程序 調(diào)用客戶端庫相應(yīng)的函數(shù), 發(fā)送 點擊元素
的指令(封裝在HTTP消息里)給 Appium Server
Appium Server 再轉(zhuǎn)發(fā)這個指令給 手機(jī)上的自動化代理
手機(jī)上的自動化代理 接收到 指令后,調(diào)用手機(jī)平臺的自動化庫,執(zhí)行點擊操作,返回點擊成功的結(jié)果給 Appium Server
Appium Server 轉(zhuǎn)發(fā)給 自動化程序
自動化程序了解到本操作成功后,繼續(xù)后面的自動化流程
其中,自動化代理控制,使用的什么庫來實現(xiàn)自動化的呢?
如果測試的是蘋果手機(jī), 用的是蘋果的 XCUITest 框架 (IOS9.3版本以后)
如果測試的是安卓手機(jī),用的是安卓的 UIAutomator 框架 (Android4.2以后)
這些自動化框架提供了在手機(jī)設(shè)備上運(yùn)行的庫,可以讓程序調(diào)用這些庫,像人一樣自動化操控設(shè)備和APP,比如:點擊、滑動,模擬各種按鍵消息等。
點擊這里,邊看視頻講解,邊學(xué)習(xí)以下內(nèi)容
本教程主要講解 安卓APP的自動化。
環(huán)境搭建需要下載安裝不少軟件,而且還有不少是國外網(wǎng)站下載的。
為了方便各位朋友,白月黑羽把這些軟件 最新的安裝包 都放在如下的百度網(wǎng)盤鏈接中了,請大家自行下載。
鏈接:https://pan.baidu.com/s/19C9fGmoXne8DgfXhrTB2TQ
提取碼:kgwb
根據(jù)原理圖, 我們知道自動化程序需要調(diào)用客戶端庫和 Appium Server 進(jìn)行通信。
因為我們介紹Python語言開發(fā),所以當(dāng)然是用pip安裝,如下
pip install appium-python-client
Appium Server 是用 nodejs 運(yùn)行的,基于js開發(fā)出來的。
Appium組織為了方便大家安裝使用,制作了一個可執(zhí)行程序 Appium Desktop,把 nodejs 運(yùn)行環(huán)境、Appium Server 和一些工具 打包在里面了,只需要簡單的下載安裝就可以了。
可以從 上面給出的百度網(wǎng)盤連接 下載安裝: Appium-windows-1.15.1.exe
附加信息: Appium Desktop官方下載,點擊這里打開下載頁面
本教程主要講解 安卓APP的自動化,必須要安裝安卓SDK(后面會講到),而安卓SDK需要 JDK 環(huán)境。
可以從 上面給出的百度網(wǎng)盤連接 下載安裝: jdk-8u211-windows-x64.exe
安裝好之后,還需要添加一個環(huán)境變量 JAVA_HOME
,指定 值 為 jdk安裝目錄,比如
JAVA_HOME d:\tools\java\jdk1.8.0_211
具體操作參考視頻講解。
對于安卓APP的自動化,Appium Server 是需要 Android SDK的。
因為要用到里面的一些工具,比如 要執(zhí)行命令設(shè)置手機(jī)、傳送文件、安裝應(yīng)用、查看手機(jī)界面等。
可以從 上面給出的百度網(wǎng)盤連接 下載最新的 Android SDK文件包: androidsdk.zip
,并且解壓,即可。
解壓完成后,需要 配置一下 添加一個 環(huán)境變量 ANDROID_HOME
,設(shè)置值為sdk包解壓目錄,比如 d:\tools\androidsdk
另外,還推薦大家配置環(huán)境變量 PATH ,加入 adb所在目錄, d:\tools\androidsdk\platform-tools\
注意:是 添加
該目錄到環(huán)境變量PATH中, ?。?!不是替換!?。?/code> ,否則會導(dǎo)致系統(tǒng)命令都找不到的嚴(yán)重后果,初學(xué)者 請對照視頻講解操作。
上述的軟件環(huán)境都準(zhǔn)備好以后,要自動化手機(jī)APP,需要:
在你運(yùn)行程序的電腦上 用 USB線 連接上 你的安卓手機(jī)
進(jìn)入 手機(jī)設(shè)置
-> 關(guān)于手機(jī)
,不斷點擊 版本號
菜單(7次以上),
退出到上級菜單,在開發(fā)者模式中,啟動USB調(diào)試
如果手機(jī)連接USB線后,手機(jī)界面彈出 類似 如下提示。
選擇 允許USB調(diào)試。
注意:
有的手機(jī)系統(tǒng),可能需要一些額外的選項需要設(shè)置好。
比如,有的手機(jī),開發(fā)者選項里 需要打開 允許通過USB安裝應(yīng)用
等。
總之,給USB開發(fā)調(diào)試 盡可能方便的控制手機(jī)。
連接好以后,打開命令行窗口, 執(zhí)行 adb devices -l
命令來列出連接在電腦上的安卓設(shè)備。
如果輸出 類似如下的內(nèi)容:
List of devices attached4d0035dc767a50bb device product:t03gxx model:GT_N7100 device:t03g
表示電腦上可以查看到 連接的設(shè)備,就可以運(yùn)行自動化程序了。
點擊這里,邊看視頻講解,邊學(xué)習(xí)以下內(nèi)容
下面是一段使用 Appium 自動化的打開 B站 應(yīng)用,搜索 白月黑羽
發(fā)布的教程視頻,并且打印視頻標(biāo)題的示例。
from appium import webdriverfrom appium.webdriver.extensions.android.nativekey import AndroidKeydesired_caps = { 'platformName': 'Android', # 被測手機(jī)是安卓 'platformVersion': '8', # 手機(jī)安卓版本 'deviceName': 'xxx', # 設(shè)備名,安卓手機(jī)可以隨意填寫 'appPackage': 'tv.danmaku.bili', # 啟動APP Package名稱 'appActivity': '.ui.splash.SplashActivity', # 啟動Activity名稱 'unicodeKeyboard': True, # 使用自帶輸入法,輸入中文時填True 'resetKeyboard': True, # 執(zhí)行完程序恢復(fù)原來輸入法 'noReset': True, # 不要重置App 'newCommandTimeout': 6000, 'automationName' : 'UiAutomator2' # 'app': r'd:\apk\bili.apk',}# 連接Appium Server,初始化自動化環(huán)境driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)# 設(shè)置缺省等待時間driver.implicitly_wait(5)# 如果有`青少年保護(hù)`界面,點擊`我知道了`iknow = driver.find_elements_by_id("text3")if iknow: iknow.click()# 根據(jù)id定位搜索位置框,點擊driver.find_element_by_id("expand_search").click()# 根據(jù)id定位搜索輸入框,點擊sbox = driver.find_element_by_id('search_src_text')sbox.send_keys('白月黑羽')# 輸入回車鍵,確定搜索driver.press_keycode(AndroidKey.ENTER)# 選擇(定位)所有視頻標(biāo)題eles = driver.find_elements_by_id("title")for ele in eles: # 打印標(biāo)題 print(ele.text)input('**** Press to quit..')driver.quit()
運(yùn)行代碼前,要先 運(yùn)行 Appium Desktop
上面的代碼只是抓取一頁視頻標(biāo)題,要自動化滾動抓取所有的視頻標(biāo)題,實戰(zhàn)班學(xué)員
,請聯(lián)系老師獲取參考代碼。
游客
也可以 分享課程 領(lǐng)取參考代碼,點擊這里查看
點擊這里,邊看視頻講解,邊學(xué)習(xí)以下內(nèi)容
如果你應(yīng)用已經(jīng)安裝在手機(jī)上了,可以直接打開手機(jī)上該應(yīng)用,進(jìn)入到你要操作的界面
然后執(zhí)行
adb shell dumpsys activity recents | find "intent={"
會顯示如下,最近的 幾個 activity 信息,
intent={act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=tv.danmaku.bili/.ui.splash.SplashActivity}intent={act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000300cmp=com.huawei.android.launcher/.unihome.UniHomeLauncher}intent={flg=0x10804000 cmp=com.android.systemui/.recents.RecentsActivity bnds=[48,1378][10322746]}intent={flg=0x10000000 cmp=com.tencent.mm/.ui.LauncherUI}
其中第一行就是當(dāng)前的應(yīng)用,我們特別關(guān)注最后
cmp=tv.danmaku.bili/.ui.splash.SplashActivity
應(yīng)用的package名稱就是 tv.danmaku.bili
應(yīng)用的啟動Activity就是 .ui.splash.SplashActivity
如果你已經(jīng)獲取到了 apk,在命令行窗口執(zhí)行
d:\tools\androidsdk\build-tools\29.0.3\aapt.exe dump badging d:\tools\apk\bili.apk | find "package: name="
輸出信息中,就有應(yīng)用的package名稱
package: name='tv.danmaku.bili' versionCode='5531000' versionName='5.53.1' platformBuildVersionName='5.53.1' compileSdkVersion='28' compileSdkVersionCodename='9'
在命令行窗口執(zhí)行
d:\tools\androidsdk\build-tools\29.0.3\aapt.exe dump badging d:\tools\apk\bili.apk | find "launchable-activity"
輸出信息中,就有應(yīng)用的啟動Activity
launchable-activity: name='tv.danmaku.bili.ui.splash.SplashActivity' label='' icon=''
聯(lián)系客服