一、所需軟件包
一、node.js(v20.1.1)
二、Java(JDK17)
三、Android SDK(24.4.1版本)
四、Python(3.10)
五、PyCharm(2023.3.2)
六、Appium(1.21.0)
七、雷電模擬器(雷電9)
若不想單獨去下載,想直接獲取所有安裝包,請訪問百度網(wǎng)盤鏈接提?。篽ttps://pan.baidu.com/s/1LSzazfQ2PbdiMLfZ4WiWAQ?pwd=n4vi
二、環(huán)境配置
2.1環(huán)境配置之Node.js
? ? ? ?在官網(wǎng)選擇對應(yīng)版本下載:https://nodejs.org/en/download/,如圖所示。.msi 是一種 Windows 安裝程序文件,而 .zip 是一個壓縮包,解壓即可,不需要安裝。這里選擇.msi格式(64位)。
? ? ? ? ? ? ? ? ?
? ? ? ?完成下載后,雙擊.msi文件進行安裝,安裝成功后打開命令提示符窗口(win+R,再輸入cmd回車)。輸入node -v 獲得node.js的版本信息則是安裝成功,如圖所示。(注意是node(空格)-v)。
? ? ? ? ? ? ? ? ? ? ? ??
2.2環(huán)境配置之Java
① 下載,安裝Java的JDK,官網(wǎng)
? ? ?https://www.oracle.com/java/technologies/downloads/#jdk17-windows(Java1.8也可以)
② 配置JAVA_HOME,CLASSPATH,PATH環(huán)境變量,詳情參考網(wǎng)址? ? ?https://www.cnblogs.com/cnwutianhao/p/5487758.html
③ 驗證Java環(huán)境是否配置成功,打開cmd或終端輸入java - version、java、javac 幾個命令看是否 會報錯。
2.3環(huán)境配置之Android SDK
①下載,解壓Android SDK
? ? 進入Android中文網(wǎng) http://www.androiddevtools.cn/,點擊SDK Tools,點擊android-sdk_r24.4.1-windows.zip下載壓縮包并解壓。如圖所示。
②下載必要包
????解壓SDK到本地后,進入SDK目錄,如圖所示。雙擊啟動SDK Manager.exe。點擊Deselect All,然后勾選如圖所示的包選項,點擊Install 3packages...下載SDK必要的包。
③配置SDK環(huán)境變量
1)成功安裝后Android SDK的根目錄下應(yīng)該同時具有了tools和platform-tools兩個目錄。
2)設(shè)置 ANDROID_HOME 系統(tǒng)變量(沒有請新建)為Android SDK根目錄 路徑(類似JAVA_HOME)如圖所示。
④把 Android SDK 路徑下的tools 和 platform-tools 兩個目錄路徑加入到系統(tǒng)環(huán)境變量 Path。如圖所示。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
⑤ 驗證Android SDK環(huán)境
? ? 在終端(cmd)輸入命令 adb ,回車,輸出如下 adb 版本和幫助信息說明環(huán)境配置成功(只截取了一部分,后面還有很長),如圖所示。
2.4 環(huán)境配置之Python
①下載安裝文件: https://www.python.org/downloads/,這里選擇Python 3.10.0版本,點擊Windows installer(64-bit)下載Python安裝程序。安裝時選擇Add Python 3.10 to PATH 自動配置Python環(huán)境變量。然后點擊Install Now進行安裝。
? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ?
②打開命令提示符窗口(win+R,再輸入cmd回車),輸入python并回車,出現(xiàn)以下類似信息即為安裝成功。如圖所示。
③下載PyCharm: ??
https://www.jetbrains.com/pycharm/download/other.html,這里選擇2023.3.2版本(其他版本亦可)。如圖所示。
??
2.5 環(huán)境配置之Appium
①下載安裝文件https://github.com/appium/appium-desktop/releases/tag/v1.21.0(開啟代理打開網(wǎng)址)MAC請下載dmg(這里下載1.21.0版本)
??
②直接雙擊appium-installer.exe文件安裝就好,桌面會生成一個Appium的圖標,此時已經(jīng)可以通過Appium在桌面快捷方式啟動Appium桌面應(yīng)用程序。
? ? ? ? ? ? ? ? ? ?
③配置Appium環(huán)境變量:
? ?找到上一步安裝Appium指定的安裝路徑(右擊桌面的Appium圖標,打開文件所在位置可找到安裝路徑),如圖所示。
? ? ? ? ? ??
將該路徑下的Appium加入環(huán)境變量Path,如圖所示。
? ? ? ? ? ? ? ?
④安裝appium-python-client
啟動終端(cmd)輸入
pip install appium-python-client==2.11.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
,出現(xiàn)提示Successfully installed即成功。(終端輸入
pip list
進行檢查,如果出現(xiàn)下圖中的WARNING提示,可按照要求更新或者不管),如圖所示。?
2.6 環(huán)境配置之模擬器
官網(wǎng)安裝雷電模擬器:
安裝網(wǎng)址:https://www.ldmnq.com/,選擇雷電9(雷電5也可以)下載,如圖所示。(安裝過程中如果提示安裝失敗,請以管理員身份運行)
? ? ? ? ? ??
三、測試示例
3.1啟動雷電模擬器
以學習通為測試對象,打開雷電模擬器,下載學習通。然后啟動學習通,登錄進入主頁面。
?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
3.2啟動Appium
雙擊打開Appium,點擊Start Server v1.21.0,開啟Appium。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
點擊右上角的搜索符號,開啟Appium Server。
? ? ? ? ? ? ?
這里需要編輯一個用于連接模擬器并打開學習通的參數(shù)配置(Desired Capabilities),具體有四個核心的參數(shù),分別為platformName,deviceName,appPackage,appActivity。?
? ? ? ??
下面介紹如何獲取到這些參數(shù)
3.3配置Capability
3.3.1platformName
由于雷電模擬器是Android,所以platformName為Android
3.3.2deviceName
按住win+R鍵打開cmd窗口,輸入
adb devices
結(jié)果如圖所示,所以deviceName即為emulator-5554,也就是雷電模擬器的設(shè)備名。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
3.3.2appPackage和appActivity
輸入以下命令
adb shell dumpsys activity | findstr "mResume"
(Android 8.1之下版本使用
adb shell dumpsys activity | findstr "mFocus"
)查看學習通應(yīng)用的appPackage和appActivity(必須保證雷電模擬器的學習通應(yīng)用程序處于開啟狀態(tài))如圖所示。appPackage為com.chaoxing.mobile,appActivity為.main.ui.MainTabActivity
所以最終配置如下:
?
這里多設(shè)置了一個noReset,這個參數(shù)表明不停止應(yīng)用程序和清除應(yīng)用程序數(shù)據(jù)。
點擊Start Session,等待一段時間(Appium會驅(qū)動雷電模擬器重啟學習通,如果學習通處于黑屏狀態(tài)導(dǎo)致連接失敗,退出學習通,重新點擊Start Session連接一次應(yīng)該就可以了)如果出現(xiàn)以下界面,表示連接成功。
??
打開PyCharm,創(chuàng)建名為MobileAppTestProject的項目,新建一個名為XuexitongTest的python文件。如圖所示。
? ? ? ? ??
輸入以下測試腳本,點擊PyCharm右上角的運行符號,執(zhí)行測試腳本(確保Appium和雷電模擬器處于開啟狀態(tài),腳本才能執(zhí)行成功),腳本會驅(qū)動Appium自動打開學習通并依次點擊“我”和“待辦事項”,完成自動化測試。
from appium import webdriver
import time
from selenium.webdriver.common.by import By
# Appium Desired Capabilities
caps = {
"platformName": "Android",
"deviceName": "emulator-5554",
"appPackage": "com.chaoxing.mobile",
"appActivity": ".main.ui.MainTabActivity",
"noReset": True
}
# 與 Appium server 建立連接
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", caps)
# 等待頁面加載,可以根據(jù)實際情況調(diào)整等待時間
driver.implicitly_wait(10)
# arrange
expected = "待辦事項"
# act
# 1.點擊“我”
driver.find_element(By.XPATH, "http://*[@text='我']").click()
time.sleep(2)
# 2.進入"待辦事項"
driver.find_element(By.ID, "com.chaoxing.mobile:id/tvTitle").click()
time.sleep(2)
# 3.獲取測試結(jié)果
actual = driver.find_element(By.ID, "com.chaoxing.mobile:id/tvTitle").text
# 斷言
assert actual == expected
# 關(guān)閉應(yīng)用程序和驅(qū)動
driver.quit()
??
至此,移動應(yīng)用測試環(huán)境配置成功。下面將介紹如何使用Appium。
四、Appium使用
4.1GUI說明
? ? ? 當Appium連接雷電模擬器成功后,應(yīng)用程序的屏幕截圖(快照視圖)將出現(xiàn)在左邊。如圖所示。? 可以在屏幕快照視圖中使用鼠標來點擊各種UI元素,將會看到它們突出顯示。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ?窗口的中間是應(yīng)用程序的層次結(jié)構(gòu), 表示為XML。如圖所示??梢酝ㄟ^單擊它樹節(jié)點,或者通過點擊屏幕快照視圖中的元素來導(dǎo)航這棵樹 然后它們在視圖中會被強調(diào)顯示。在應(yīng)用層次結(jié)構(gòu)中會直接將元素的id也就是resource-id值標記在樹上,這對于 Appium定位元素很方便,可以快速看到 元素是否有id。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? 當一個元素被突出顯示時,它的信息會出現(xiàn)右側(cè)的元素信息視圖中。如圖所示。這個細節(jié)視圖包括對元素的潛在操作,以及元素屬性的表。這些屬性將決定 Appium定位元素的策略。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
以下是對于Appium上面操作欄的初步說明。
?
4.2Appium+Python常用API
?4.2.1、驅(qū)動初始化及基礎(chǔ)操作
webdriver.Remote(command_executor, desired_capabilities): 初始化 Appium 驅(qū)動。
driver.quit(): 關(guān)閉應(yīng)用程序和驅(qū)動。
4.2.2、元素定位及操作
driver.find_element(by, value): 根據(jù)指定的定位方式和值找到單個元素。
driver.find_elements(by, value): 根據(jù)指定的定位方式和值找到一組元素。
element.click(): 點擊元素。
element.send_keys(text): 向元素發(fā)送文本。
4.2.3、元素等待
time.sleep(seconds):強制等待,無論元素是否已準備好,都會等待指定的時間后執(zhí)行 后續(xù)操作。
driver.implicitly_wait(seconds): 隱式等待,設(shè)置全局等待時間。在查找元素時等待一定的時間,如果在規(guī)定時間內(nèi)找到了元素,則立即執(zhí)行后續(xù)操作,否則等待超時后拋出異常。
WebDriverWait(driver, timeout).until(expected_conditions.condition):顯示等待,在特定條件下等待一定時間,直到條件滿足或等待超時。
4.2.4、頁面導(dǎo)航
driver.get(url): 打開指定的 URL。 ? ? ?
driver.back(): 返回上一頁。 ? ? ? ?
driver.forward(): 前進到下一頁。
4.2.5、屏幕滑動與滾動
driver.swipe(start_x, start_y, end_x, end_y, duration): 在屏幕上執(zhí)行滑動操作。文章來源:http://www.zghlxwxcb.cn/news/detail-840678.html
driver.scroll(origin_element, destination_element): 在頁面上執(zhí)行滾動操作。文章來源地址http://www.zghlxwxcb.cn/news/detail-840678.html
到了這里,關(guān)于移動應(yīng)用測試(Python+Appium+雷電模擬器)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!