提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔
文章目錄
- 前言
- 一、環境準備
- 1.安裝軟件
- 2.安裝庫
- 二、adb 連接手機
- 1. 準備工作
- 2. 第一種連接方式:USB連接
- 3. 第二種連接方式:WLAN連接
- 4. 第三種連接方式:WiFi連接
- 5.查看端口轉發
- 三、uiautomator2 連接手機
- 1. 前期準備
- 2. 默認連接
- 3. WIFI 地址連接
- 4. 解決 Uiautomator not starting 問題
- 四、uiautomator2 的使用
- 1. 安裝、卸載
- 2. 啟動、關閉、清除
- 3. 獲取APP包名
- 4. 設備操作
- 5. 按鍵操作
- 五、元素
- 1. 元素定位輔助工具weditor
- 2. 元素(控件)構成
- 3. 元素(控件)定位方式
- 4. 通過上下級關系去定位元素
- 5. 點擊操作
- 6. 滑屏操作
- 7. 輸入和清空
- 8. 截屏操作
- 9. 元素等待
前言
本文章需要會 python 基礎語法,課程目標是熟練使用 uiautomator2 庫進行 android 自動化測試。
一、環境準備
1.安裝軟件
- python3
- pycharm社區版
- 安卓手機或模擬器
- adb
提示:需要配置相應的環境變量
2.安裝庫
##打開cmd面板,安裝以下庫
pip install uiautomator2
pip install setuptools
二、adb 連接手機
1. 準備工作
- 在“設置-我的設備-全部參數”找到手機版本,連續點擊7次會進入開發者模式
- 進入開發者選項頁面,把USB調試、USB安裝都打開,然后才能正常的進行連接。
2. 第一種連接方式:USB連接
需要用可以傳輸數據的數據線連接手機和電腦,會彈窗選擇連接方式(僅充電、傳文件等等),選擇傳文件。然后用adb命令查看連接設備 adb devices -l ,能看到設備信息就說明已連接到設備可以正常調試設備了,否者可能是開發者模式沒打開。
adb devices -l
3. 第二種連接方式:WLAN連接
- 這種方式適用于Android版本10及一下的手機,需要借助USB。首先要確保手機和電腦在同一個局域網內(連接同一個WiFi),其次需要在開發者選項里面將無線連接打開,進入可以查看到手機設備的IP,并且通過USB連接手機和電腦。
- 用adb命令設置手機監聽 adb tcpip 5555
#需要usb連接手機才能開啟
adb tcpip 5555
- 然后就可以拔掉USB了,執行命令adb connect 手機ip:5555
#通過手機無線網查看ip地址
adb connect 192.168.1.178:5555
- 然后用adb命令查看連接設備 adb devices -l ,能看到設備信息就說明已連接到設備可以正常調試設備了
adb devices -l
4. 第三種連接方式:WiFi連接
- 這種方法適用于Android版本11及以上,adb --version ≥ 30.0.0的條件使用。首先要確保手機和電腦在同一個局域網內(連接同一個WiFi),要把開發者模式和無線調試模式,選擇使用配對碼配對,需要記下配對碼、IP 地址和端口號。
#查看 adb 版本號
adb --version
- 運行命令adb pair 手機ip:端口號,進入下一步,根據提示輸入配對碼,系統會顯示配對成功
adb pair 192.168.1.179:45893
# Enter pairing code: 840322
- 執行命令adb connect 手機ip:端口號 ;
# 和配對的端口號不一樣
adb connect 192.168.1.179:39635
- 然后用adb命令查看連接設備 adb devices -l ,能看到設備信息就說明已連接到設備可以正常調試設備了。
adb devices -l
5.查看端口轉發
adb forward --list
三、uiautomator2 連接手機
1. 前期準備
打開手機軟件 ATX,啟動 UIAUTOMATOR
2. 默認連接
import uiautomator2 as u2
#僅當只一個的時候可以使用
device = u2.connect()
#通過序列號連接
device = u2.connect('U4HA6HXK7XEY65BY')
#通過wifif去接鏈接
device = u2.connect('http://192.178.1.178:7912')
device = u2.connect('http://192.178.1.178')
3. WIFI 地址連接
import uiautomator2 as u2
device = u2.connect_wifi('192.178.1.178:7912')
device = u2.connect_wifi('192.178.1.178')
4. 解決 Uiautomator not starting 問題
先試用adb devices查詢到設備
再使用命令python -m uiautomator2 init在模擬器上安裝ATX
打開ATX,啟動UIautomator,提示Uiautomator not starting,
解決辦法:
adb shell
chmod 755 /data/local/tmp/atx-agent
data/local/tmp/atx-agent version # 查看版本
/data/local/tmp/atx-agent server -d # 啟動atx-agent并切換到后臺運行
參考鏈接:https://www.jianshu.com/p/b002f4505aee
四、uiautomator2 的使用
1. 安裝、卸載
import uiautomator2 as u2
device = u2.connect("emulator-5554")
#APP檸檬瀏覽器 的下載地址
url = "https://dl.byhh.net:2333/6_83698"
#安裝 APP檸檬瀏覽器
device.app_install(url)
# 打開APP
device(text='檸檬瀏覽器').click()
# 獲取APP信息
appInfo = device.app_current()
print(appInfo )
# 卸載 APP(包名)
device.app_uninstall("com.ss.android.article.browser")
2. 啟動、關閉、清除
import uiautomator2 as u2
device = u2.connect("emulator-5554")
# 打開APP
device.app_start("com.ss.android.article.browser")
# 關閉 APP
device.app_stop("com.ss.android.article.browser")
# 清除APP 數據
device.app_clear("com.ss.android.article.browser")
3. 獲取APP包名
# 1.通過代碼獲取APP包名
# 獲取當前運行的APP包名
appInfo = device.app_current()
# 獲取正在運行的APP 所有包名
appInfos = device.app_list_running()
4. 設備操作
import uiautomator2 as u2
device = u2.connect("emulator-5554")
# 獲取設備相關信息
info = device.info
# 獲取設備更多信息
deviceInfo = device.device_info
# 屏幕大小
windosSize = device.window_size()
# 截屏操作
device.screenshot("test.png")
# 將電腦文件推送到手機
device.push('test.txt','/data/')
# 將手機文件拉取到電腦
device.pull('/data/test.txt','./text2.txt')
5. 按鍵操作
import uiautomator2 as u2
device = u2.connect("emulator-5554")
# 亮屏
device.screen_on()
# 熄屏
device.screen_off()
# 音量加/減
device.press("volume_up")
device.press("volume_down")
# 靜音
device.press("volume_mute")
# 最近的程序
device.press('recent')
# 電源鍵
device.press("power")
## 其它對應的press 可進行百度查詢
五、元素
1. 元素定位輔助工具weditor
# 方法一:安裝weditor
pip install weditor
# 方法二:安裝weditor
git clone https://github.com/alibaba/web-editor
pip3 install -e web-editor
# 啟動 weditor
weditor
weditor 對比其它工具:uiautomatorviewer
- 可以周管理多個設備
- 直接在調試界面操作手機
- 自動生成uiauotmator代碼
2. 元素(控件)構成
- 控件名稱
- 控件屬性(特征)resourceId,className,description,text 等
- 子控件
3. 元素(控件)定位方式
- text,textContains,textMatches,textStartswith
- className,classNameMatches
- description,descriptionContains,descriptionMatchs,descriptionStartwith
- checkable,enabled,clickable,longclickable
- scrollable,enabled,forcusable,focused,selected
- packageName,packageNameMatches
- resourceId,resourceIdMatches
- index,instance
提示:Contains(包含)Matches(正則表達式)Startswith(開頭是)instance(索引)
4. 通過上下級關系去定位元素
import uiautomator2 as u2
d = u2.connect("emulator-5554")
# child 子元素
d(className="android.view.ViewGroup").child(text="檸檬瀏覽器").click()
# sibling 同級元系
d(text="ATX").sibling(text="檸檬瀏覽器").click()
# 根據頁相對位置(速度較慢)
# left,左邊的元素
d(text="ATX").left().click()
# right,右邊的元素
# up,上面的元素
# down,上面的元素
5. 點擊操作
import uiautomator2 as u2
d = u2.connect("emulator-5554")
# 1.通過定位元素點擊
d(text="檸檬瀏覽器").click()
# 2.通過全局坐標點擊
d.click(189,234)
# 3.通過百分比點擊
d.click(0.123,0.934)
6. 滑屏操作
import uiautomator2 as u2
d = u2.connect("emulator-5554")
# 像素位置(startX, startY, endX, endY)
d.swipe(800,500,100,500)
# 滑動百分比(方向,百分比)
d.swipe('left',scale = 0.9)
# 定位元素,再使用元素對象滑動 (方向,滑動時間)
e = d(text="檸檬瀏覽器")
e.swipe('left',steps= 100)
7. 輸入和清空
# 輸入
d.send_keys("1234566")
# 睡眠
d.sleep(3)
# 清空
d.clear_text()
8. 截屏操作
import uiautomator2 as u2
d = u2.connect("emulator-5554")
from PIL import IMAGEFILTER
# 1.直接截屏
d.screenshop('dest.png')
# 2.截屏對像 pillow
img = d.screenshop()
img.save('test.png') #保存原始圖片
img2 = img.filter(ImageFIlter.BLUR) # 模糊處理
img2.save('test.png')
img3 = img.resize((90,169)) #尺寸處理
img3.save('test.png')
9. 元素等待
# 睡眠
time.sleep(5)# 等待APP加載完成(wait默認超時時間20s)
# d.wait_timeout = 30 //也可以設置默認超時間
# d.implicitly_wait(30) //也是設置默認時間
d.app_start("com.xxx.fave",wait=True)
# 等待頁面加載完成
d.wait_activity()
# 等待無素出現
d().wait()
# 等待元素消失
d().wait_gone()
# 判元素是否存在
d().exist()
# 操作單獨設置超時,一般不需要設置
d().click(timeout=50)
d().set_text(timeout=50)
d().clear_text(timeout=50)