八、UI自動化移動端
阿新 • • 發佈:2022-05-25
環境介紹
- 模擬器
- 模擬真機和android作業系統
- adb
- 谷歌公司提供的安卓系統除錯工具
- appium
- 移動端自動化測試, 連線adb一個工具
- Appium-Python-Client
- 在python中的一個包, 作用是通過python代表編寫自動化測試指令碼
adb常用命令
adb devices
- 顯示或者連線到android系統
adb devices
* daemon not running; starting now at tcp:5037 * daemon started successfully List of devices attached emulator-5554 offline # 檢測到了一個裝置, offline離線(裝置存在, 但並沒有連線到adb), # 解決辦法, 再次執行adb devices
List of devices attached
emulator-5554 device
# 顯示device,代表連線裝置成功
獲取app的包名和介面名
- 每個app都有一個包名
- 一個app中不同的介面都有自己的介面名
- 在移動端自動化測試中, 如果要測試一個app,那麼就一定要知道這個app的包名和介面名
adb shell dumpsys window windows | findstr mFocusedApp
- 檢視tpshopApp的包名和介面名
第一步: 在安卓中啟動app 第二步: 在windows的cmd中執行如下命令: adb shell dumpsys window windows | findstr mFocusedApp
mFocusedApp=AppWindowToken{5c9352d token=Token{c2ef044 ActivityRecord{aaedd57 u0 com.tpshop.malls/.SPMainActivity t5
- 包名com.tpshop.malls
- 介面名.SPMainActivity
安卓檔案與windows的同步
adb pull
- 把安卓中的檔案, 下載的windows
adb pull 安卓的檔案路徑檔名 windows的檔案存放路徑
adb pull /default.prop c:\file # 把安卓根目錄下的檔案default.prop, 下載到windows的c盤file目錄裡 adb pull /lib/libz.so c:\file # 把安卓根目錄的lib目錄下的檔案libz.so, 下載到windows的c盤file目錄裡
adb push
- 把windows的檔案上傳到安卓
adb push windows的檔案路徑 安卓的檔案位置
adb push c:\file\a.txt /sdcard
# 把windos上的c盤file目錄下的a.txt上傳到安卓的根目錄的sdcard裡
adb啟動指定的app
adb shell am start -W 包名/介面名
adb shell am start -W com.tpshop.malls/.SPMainActivity # 啟動tpshop
Status: ok
Activity: com.tpshop.malls/.SPMainActivity
ThisTime: 3662 # 介面啟動需要的時間
TotalTime: 3662 # 包啟動需要的時間
WaitTime: 3786 # 安卓為啟動app需要的時間
Complete # 完成
檢視安卓系統日誌
- adb logcat
adb安裝和解除安裝app
- adb install apk檔案所在的路徑
adb install c:\file\tn3180.apk # 安裝c盤file目錄裡的tn3180.apk這個安裝檔案
- adb uninstall 包名
adb uninstall com.tencent.news # 把包com.tencent.news解除安裝
重啟adb服務
- adb kill-server 關閉服務
- adb start-server 啟動服務
adb後臺有個服務程序, 有時候這個程序會工作出問題, 通過以上兩個命令, 可以重啟adb的服務
檢視adb幫助
- adb --help
基礎操作
入門程式碼
from appium import webdriver
import time
dict1 = {"platformName":"Android",
"platformVersion":"7.1",
"deviceName":"127.0.0.1:5555", # 隨便填一個值, 但不能空
"unicodeKeyboard":True, # 中文支援
"resetKeyboard":True, # 中文支援
"appPackage":"com.android.settings", # 啟動的包名
"appActivity":".Settings" # 介面名
}
driver = webdriver.Remote("http://localhost:4723/wd/hub", dict1)
driver.find_element_by_id("dashboard_tile").click()
time.sleep(5)
driver.quit()
啟動指定包和介面
- driver.start_activity(包名, 介面名)
# 開啟通訊錄
driver.start_activity("com.android.contacts", ".activities.PeopleActivity")
獲取包名和介面名
- driver.current_package # 包名
- driver.current_activity # 介面名
print(driver.current_package)
print(driver.current_activity)
關閉驅動和app
- 關閉app後驅動物件還可以繼續控制
driver.close_app()
安裝和解除安裝app
- 判斷是否安裝指定app
- driver.is_app_installed("包名")
- 安裝app
- driver.install_app(r"apk檔案路徑")
- 解除安裝app
- driver.remove_app("包名")
if driver.is_app_installed("com.tencent.news"):
driver.remove_app("com.tencent.news") # 如果已經安裝騰訊新聞, 解除安裝
else:
driver.install_app(r"C:\app\TencentNews_3180.apk") # 如果沒有安裝騰訊新聞, 安裝
應用置於後臺
- driver.background_app(秒數)
driver.background_app(3)
定位元素
定位單個元素
- id定位
- driver.find_element_by_id(resource-id屬性值)
- class定位
- driver.find_element_by_class_name(class屬性值)
- name定位
- driver.find_element_by_accessibility_id(content-desc屬性)
- 當定位到多個符合條件的元素時,預設返回第一個
定位多個元素
- 定位一組元素時, 返回資料型別為列表
# 1.點選系統設定中的WLAN
# 2.點選WLAN中的開關按鈕
from appium import webdriver
import time
dict1 = {"platformName":"Android",
"platformVersion":"7.1",
"deviceName":"127.0.0.1:5555", # 隨便填一個值, 但不能空
"unicodeKeyboard":True, # 中文支援
"resetKeyboard":True, # 中文支援
"appPackage":"com.android.settings",
"appActivity":".Settings"}
driver = webdriver.Remote("http://localhost:4723/wd/hub", dict1)
driver.find_element_by_id("dashboard_tile").click()
time.sleep(2)
driver.find_element_by_id("switch_widget").click() # 點選WLAN開關
# 如果有多個id為"dashboard_tile"的元素, 點選第二個
# driver.find_elements_by_id("dashboard_tile")[1].click()
time.sleep(5)
driver.quit()