uiautomator2快速入門app自動化測試教程

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔

文章目錄

  • 前言
  • 一、環境準備
    • 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. 準備工作

  1. 在“設置-我的設備-全部參數”找到手機版本,連續點擊7次會進入開發者模式
  2. 進入開發者選項頁面,把USB調試、USB安裝都打開,然后才能正常的進行連接。

2. 第一種連接方式:USB連接

需要用可以傳輸數據的數據線連接手機和電腦,會彈窗選擇連接方式(僅充電、傳文件等等),選擇傳文件。然后用adb命令查看連接設備 adb devices -l ,能看到設備信息就說明已連接到設備可以正常調試設備了,否者可能是開發者模式沒打開。

adb devices -l 

3. 第二種連接方式:WLAN連接

  1. 這種方式適用于Android版本10及一下的手機,需要借助USB。首先要確保手機和電腦在同一個局域網內(連接同一個WiFi),其次需要在開發者選項里面將無線連接打開,進入可以查看到手機設備的IP,并且通過USB連接手機和電腦。
  2. 用adb命令設置手機監聽 adb tcpip 5555
#需要usb連接手機才能開啟
adb tcpip 5555 
  1. 然后就可以拔掉USB了,執行命令adb connect 手機ip:5555
#通過手機無線網查看ip地址
adb connect 192.168.1.178:5555
  1. 然后用adb命令查看連接設備 adb devices -l ,能看到設備信息就說明已連接到設備可以正常調試設備了
adb devices -l 

4. 第三種連接方式:WiFi連接

  1. 這種方法適用于Android版本11及以上,adb --version ≥ 30.0.0的條件使用。首先要確保手機和電腦在同一個局域網內(連接同一個WiFi),要把開發者模式和無線調試模式,選擇使用配對碼配對,需要記下配對碼、IP 地址和端口號。
#查看 adb 版本號
adb --version
  1. 運行命令adb pair 手機ip:端口號,進入下一步,根據提示輸入配對碼,系統會顯示配對成功
adb pair 192.168.1.179:45893
# Enter pairing code: 840322
  1. 執行命令adb connect 手機ip:端口號 ;
# 和配對的端口號不一樣
adb connect 192.168.1.179:39635
  1. 然后用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)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/160106.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/160106.shtml
英文地址,請注明出處:http://en.pswp.cn/news/160106.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

②⑩ 【MySQL Log】詳解MySQL日志:錯誤日志、二進制日志、查詢日志、慢查詢日志

個人簡介:Java領域新星創作者;阿里云技術博主、星級博主、專家博主;正在Java學習的路上摸爬滾打,記錄學習的過程~ 個人主頁:.29.的博客 學習社區:進去逛一逛~ MySQL日志 ②⑩ MySQL日志:錯誤日志…

SpringBoot3.x最簡集成SpringDoc-OpenApi

為什么使用SpringDoc 在SpringBoot低版本時一般使用Swagger掃描接口生成Json格式的在線文檔,然后通過swagger-ui將Json格式的文檔以頁面形式展示文檔。可惜遺憾的是swagger更新到3.0.0版本(springfox)后不更新了。 SpringBoot3.x以后需要的JDK版本最低為Java17&…

MQ和redis的內部原理一些總結

首先,先知道內部原理;其次,就是查官方文檔實戰了。 但是如果不熟悉內部原理,那么僅僅只是安裝官方文檔,并不能排除跟蹤問題和故障、預防風險等策略; 以下總結圖解:(mysql 8.0新增的…

YOLO目標檢測——衛星遙感艦船檢測數據集下載分享【含對應voc、coco和yolo三種格式標簽】

實際項目應用:衛星遙感艦船檢測數據集說明:衛星遙感艦船檢測數據集,真實場景的高質量圖片數據,數據場景豐富,含船一個類別標簽說明:使用lableimg標注軟件標注,標注框質量高,含voc(xm…

Redis的持久化

redis是一個內存數據庫,是把數據存儲在內存中的,而我們知道內存中的數據是不持久的,一旦服務器重啟或者進程重啟,內存的數據就丟失了.為了讓數據達到持久化的效果,就必須把數據寫到硬盤上. redis相對于mysql這樣的關系型數據庫最明顯的優勢就是快.所以為了保證速度快,數據還得…

動態跳過測試用例

動態跳過測試用例 說明 我們可以通過指定環境變量來動態判斷是否執行指定的測試用例設置環境變量有很多種方法,例如命令行方式,格式:--env keyval1,key2val2 ,若需要指定多個環境變量則需要逗號來隔開,而不是空格 t…

Live800:企業提升客戶互動體驗,有哪些關鍵因素?

如今,隨著信息時代的不斷發展,企業已經不再是單向的商業機構,他們需要與客戶進行及時的溝通與反饋,從而更好地提升客戶互動體驗,達到營銷和用戶體驗的雙贏局面。那么,企業如何提升客戶互動體驗呢&#xff1…

設計模式——RBAC 模型詳解

1.什么是 RBAC 呢? RBAC 即基于角色的權限訪問控制(Role-Based Access Control)。這是一種通過角色關聯權限,角色同時又關聯用戶的授權方式。 簡單地說:一個用戶可以擁有若干角色,每一個角色又可以被分配…

Mysql 中如何導出數據?

文章目錄 前言MySQL 導出數據使用 SELECT ... INTO OUTFILE 語句導出數據SELECT ... INTO OUTFILE 語句有以下屬性:導出表作為原始數據導出SQL格式的數據將數據表及數據庫拷貝至其他主機 后言 前言 hello world歡迎來到前端的新世界 😜當前文章系列專欄:…

Linux程序之可變參數選項那些事!

一、linux應用程序如何接收參數? 1. argc、argv Linux應用程序執行時,我們往往通過命令行帶入參數給程序,比如 ls /dev/ -l 其中參數 /dev/ 、-l都是作為參數傳遞給命令 ls 應用程序又是如何接收這些參數的? 通常應用程序都…

Raspberry Pi 5 新一代單板計算機:樹莓派5代 (介紹、入門、解疑)

樹莓派5代正式發布后,硬件和性能的全面升級讓眾多開發者們都想入手感受一波,外觀上Raspberry Pi 5 與前代產品非常相似,不過,在保留信用卡大小的整體尺寸的同時,也更新了一些設計元素,以適應新芯片組的功能…

python實現調和反距離空間插值法AIDW

1 簡介 AIDW 主要是針對 IDW 的缺點進行了改進,考慮了樣本點與預測點的位置,即方向和距離,具體見下圖: 2 改進 IDW 公式: 從IDW算法可看出,插值點的估算值僅與插值樣本距插值點的遠近相關,并未…

貝葉斯AB測試

AB測試是用來評估變更效果的有效方法,但很多時候會運行大量AB測試,如果能夠在測試中復用之前測試的結果,將有效提升AB測試的效率和有效性。原文: Bayesian AB Testing[1] 隨機實驗,又稱AB測試,是行業中評估因果效應的既…

自定義類型:結構體

1.結構體類型的聲明 1.1結構體的概念 結構是?些值的集合,這些值稱為成員變量。結構的每個成員可以是不同類型的變量。 1.2 結構的聲明 struct tag {member-list; }variable-list; 例如描述?個學?: struct Stu {char name[20];//名字int age;//年…

【Mysql】[Err] 1293 - Incorrect table definition;

基本情況 SQL文件描述 /* Navicat MySQL Data TransferSource Server : cm4生產-200 Source Server Version : 50725 Source Host : 192.168.1.200:3306 Source Database : db_wmsTarget Server Type : MYSQL Target Server Version : 50725 File…

vxe編輯保存表格

業務需求: 1、需要點擊編輯時,全部表格顯示編輯框,點擊保存,全部保存。 2、因為位置問題,產品經理把24小時分成了兩行,開發就得分兩個表格。列標題是寫死的,文字偏移也是寫死的,其他…

服務器主機安全的重要性及防護策略

在數字化時代,服務器主機安全是任何組織都必須高度重視的問題。無論是大型企業還是小型企業,無論是政府機構還是個人用戶,都需要確保其服務器主機的安全,以防止數據泄露、網絡攻擊和系統癱瘓等嚴重后果。 一、服務器主機安全的重…

__int128類型movaps指令crash

結論 在使用__int128時,如果__int128類型的內存起始地址不是按16字節對齊的話,有些匯編指令會拋出SIGSEGV使程序crash。 malloc在64位系統中申請的內存地址,是按16字節對齊的,但一般使用時經常會申請一塊內存自己切割使用&#…

Qt的一個無邊界窗口公共類

頭文件&#xff1a; #pragma once #include <QWidget>class CFrameLessWidgetBase :public QWidget { public:CFrameLessWidgetBase(QWidget* p nullptr);~CFrameLessWidgetBase() {}protected:bool nativeEvent(const QByteArray& eventType, void* message, long…

static和extern

1.extern extern 是?來聲明外部符號的&#xff0c;如果?個全局的符號在A?件中定義的&#xff0c;在B?件中想使?&#xff0c;就可以使? extern 進?聲明&#xff0c;然后使?。 即在一個源文件中想要使用另一個源文件&#xff0c;即可通過這個extern來聲明使用。 2.st…