Android自動化測試實踐:uiautomator2 核心功能與應用指南

Android自動化測試實踐:uiautomator2 核心功能與應用指南

uiautomator2 是一個用于Android應用的自動化測試Python庫,支持多設備并行測試操作。它提供了豐富的API來模擬用戶對App的各種操作,如安裝、卸載、啟動、停止以及清除應用數據等。此外,uiautomator2 支持多種設備連接方式,包括USB、模擬器默認連接以及通過WiFi(TCP/IP)連接。

核心功能:

  1. 設備連接與操作:支持USB和WiFi(TCP/IP)方式連接設備,提供了查看設備列表的命令和示例代碼。
  2. 應用管理:能夠安裝和卸載應用,啟動、停止以及獲取正在運行的應用列表。
  3. 節點選擇器:提供多種節點選擇器,如基于文本、類名、描述、元素狀態、包名、資源ID等來定位UI元素。
  4. 節點操作:支持獲取匹配節點列表、節點存在性判斷、節點計數,以及查找父級節點、子節點和同級元素。
  5. 事件操作:模擬用戶交互,如點擊、輸入文本、滑動屏幕等。
  6. 坐標定位:獲取元素坐標并執行坐標點擊。
  7. 提示信息獲取:能夠獲取系統提示語。

適用場景:

  • 自動化測試:為Android應用提供自動化測試解決方案,提高測試效率。
  • 應用開發:輔助開發者在開發過程中快速定位和測試UI元素。
  • 教育與研究:作為學習和研究Android自動化測試工具的資源。

使用注意:

  • 確保設備開啟了開發者選項和USB調試。
  • 對于WiFi連接,需要先通過USB連接設備并設置TCP/IP端口,然后通過IP地址和端口號進行連接。

附加工具:

  • weditor:一個節點查看工具,幫助用戶更方便地進行節點選擇和測試。

img

APP的操作

url = "apk下載地址"
d.app_install(url)d.app_uninstall("包名")
d.app_start("包名")
d.app_stop("包名")
d.app_clear("包名")d.app_list_running() #獲取正在運行的列表#獲取正在運行的包名
print(d.app_current())

連接設備

查看設備列表

  • adb devices

  • 要使用 uiautomator2 查看設備列表,可以使用以下命令: python -m uiautomator2 init

USB模式

注意:開發者選項,打開USB調試

import uiautomator2 as u2# 注意網絡代理
u2.wait_timeout = 20  # 設置等待時間為20秒
d = u2.connect_usb()

使用設備號連接

device = u2.connect("46d0c494") # usb連接,需要開啟開發者模式,用atx也可以開啟開發中模式,cmd輸入adb devices獲取設備號

模擬器連接

device = u2.connect() # 模擬器默認連接方式

wifi(tcpip )連接

  • USB連接手機,開發者選項,打開USB調試

  • adb tcpip 5555

  • 拔掉USB連接

  • adb connect 192.168.120.139:5555 連接設備

  • adb devices 查看設備列表

  • device = u2.connect(“192.168.0.187:5555”) # tcpip同個局域網連接

如果 adb 連接斷開了,可以adb connect 192.168.0.187:5555 再次連接設備,未連接的話,

adb kill-server 重置主機

weditor工具-節點查看

#安裝
pip install weditor==0.6.4 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com 
#運行
python -m weditor 

image-20230615144526724

節點操作

選擇器

多種節點選擇器用于定位UI元素。

  • text、textContains、textMatches、textStartsWith用于根據文本內容定位元素;
  • className、classNameMatches用于根據類名定位元素;
  • description、descriptionContains、descriptionMatches、descriptionStartsWith用于根據元素描述定位元素;
  • checkable、checked、clickable、longClickable、scrollable、focused、selected、enabled、focusable用于根據元素狀態定位元素;
  • packageName、packageNameMatches用于根據應用包名定位元素;
  • resourceId、resourceIdMatches用于根據資源ID定位元素;
  • index、instance用于根據元素在頁面中的位置定位元素。

多個匹配

import uiautomator2 as u2# 連接設備
d = u2.connect_usb()# 獲取所有匹配的節點(節點列表)
nodes = d(resourceId="com.ximalaya.ting.android:id/main_tv_name")
# 獲取所有匹配的節點列表de 下標為2的節點
node_3 = d(resourceId="com.ximalaya.ting.android:id/main_tv_name",instance=2)# 判斷節點是否存在
if nodes.exists:# 獲取匹配的節點數量count = nodes.countprint("匹配的節點數量:", count)# 循環獲取節點的text屬性for node in nodes:text = node.info["text"]print("節點的text屬性:", text)
else:print("沒有匹配的節點")

查找父級節點(比較慢)

import uiautomator2 as u2# 連接設備
d = u2.connect_usb()# 獲取節點對象
node = d(resourceId="com.example.app:id/parent_node")# 查找父級節點
parent_node = node.parent
print("父級節點:", parent_node)

查找子節點

import uiautomator2 as u2# 連接設備
d = u2.connect_usb()# 獲取節點對象
node = d(resourceId="com.example.app:id/parent_node")child_nodes_0 = d(resourceId="com.example.app:id/parent_node").child(resourceId="com.example.app:id/child_node")# 查找所有子節點
child_nodes = node.child
print("所有子節點:", child_nodes)# 或者使用 children() 方法
child_nodes = node.children()
print("所有子節點:", child_nodes)

查找同級元素

text_view = my_icon.sibling(className='android.view.View')
text view.click()

查找(上下左右)的元素 (速度慢)

my = d(resourceId='com.example.app:id/button')
my.left().click()
my.right().click()
my.down().click()
my.up().click()

獲取元素坐標

from uiautomator2 import Device# 連接設備
d = Device('設備序列號')# 獲取元素
element = d(resourceId='com.example.app:id/button')# 獲取元素中心坐標
x, y = element.center()
print(f"元素中心坐標為 ({x}, {y})")

事件操作

元素點擊

# 獲取元素
element = d(resourceId='com.example.app:id/button')
element.click()

坐標點擊

d.click(500,500)

百分比點擊

d.click(0.5,0.5)

輸入

 node = d(longClickable="true",className="android.widget.EditText")node.send_keys("[炸彈]")

滑動屏幕

坐標系的起點是屏幕左上角(0,0),向右和向下為正坐標系

import uiautomator2 as u2# 獲取屏幕的寬度和高度
screen_width = d.info["displayWidth"]
screen_height = d.info["displayHeight"]
# 計算起始點和終點的坐標
start_x = screen_width // 2
start_y = screen_height - 20  # 起始點的y坐標可以根據需要進行調整
end_x = start_x
end_y = start_y - (218 * 6)  # 終點的y坐標可以根據需要進行調整d = u2.connect_usb()# 執行滑動操作
d.swipe(start_x, start_y, end_x, end_y)

獲取提示語

d.totast.get_message()

文檔參考地址

  • https://blog.csdn.net/qq_32603969/article/details/121459006
  • https://www.jianshu.com/p/38f48390c538
  • 比較全面App自動化測試工具Uiautomator2
  • python+uiautomator2 實現多設備并行

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

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

相關文章

30個!2024重大科學問題、工程技術難題和產業技術問題發布

【SciencePub學術】中國科協自2018年開始,組織開展重大科技問題難題征集發布活動,引導廣大科技工作者緊跟世界科技發展大勢,聚焦國家重大需求,開展原創性、引領性研究,不斷夯實高質量發展的科技支撐。 自2024年征集活動…

飛書文檔轉markdown 超級快捷方法。

直接使用那個github的高贊官方的工具轉換,需要設置什么小應用那種東西,還要審批,社恐人表示怕了怕了。而且文檔我分享出去,是有權限的,反正無論如何生成不了 我的方法是 直接全選,然后粘貼進Arya - 在線 …

C#的五大設計原則-solid原則

什么是C#的五大設計原則,我們用人話來解釋一下,希望小伙伴們能學會: 好的,讓我們以一種幽默的方式來解釋C#的五大設計原則(SOLID): 單一職責原則(Single Responsibility Principle…

PCL 漸進形態過濾器實現地面分割

點云地面分割 一、代碼實現二、結果示例?? 概述 漸進形態過濾器:采用先腐蝕后膨脹的運算過程,可以有效濾除場景中的建筑物、植被、車輛、行人以及交通附屬設施,保留道路路面及路緣石點云。 一、代碼實現 #include <iostream> #include <pcl/io/pcd_io.h> #in…

【LeetCode】976. 三角形的最大周長

1. 題目 2. 分析 需要分析好再動手編程。 如果要構成三角形的最大周長&#xff0c;那么就需要盡可能用最長的邊構建。所以可以先對數組排個序&#xff0c;然后基于排序得到的結果從大往小的逐個檢查長度為3的窗口&#xff0c;判斷該窗口的值是否滿足三角形的構成條件&#x…

鴻蒙開發Ability Kit(程序訪問控制):【安全控件概述】

安全控件概述 安全控件是系統提供的一組系統實現的ArkUI組件&#xff0c;應用集成這類組件就可以實現在用戶點擊后自動授權&#xff0c;而無需彈窗授權。它們可以作為一種“特殊的按鈕”融入應用頁面&#xff0c;實現用戶點擊即許可的設計思路。 相較于動態申請權限的方式&am…

構造,析構,拷貝【類和對象(中)】

P. S.&#xff1a;以下代碼均在VS2019環境下測試&#xff0c;不代表所有編譯器均可通過。 P. S.&#xff1a;測試代碼均未展示頭文件stdio.h的聲明&#xff0c;使用時請自行添加。 博主主頁&#xff1a;LiUEEEEE ??????????????????? ?? …

Excel_VBA編程

在Excel中&#xff0c;VBA&#xff08;Visual Basic for Applications&#xff09;是一種強大的工具&#xff0c;可以用來自動化各種任務。下面介紹一些常用的VBA函數和程序結構&#xff1a; 常用函數 MsgBox&#xff1a;用于顯示消息框。 MsgBox "Hello, World!"In…

【python全棧系列】day07-python數據類型-集合

Python中的集合&#xff08;Set&#xff09;是一個無序的、不包含重復元素的數據結構。它主要用于數學上的集合操作&#xff0c;如并集、交集、差集和對稱差集等。集合的基本用途包括去重和關系測試。 1、集合的特性 無序性&#xff1a;集合中的元素是無序的&#xff0c;這意…

gin-vue -admin 初始化安裝后 進入 后臺首頁報錯

報錯原因&#xff1a; 因為 我是使用的phpstudy 小皮的數據庫 默認的是MySam 的引擎 mysql 引擎需要是 innoDB 解決辦法 &#xff1a; 在linux 的環境下 配置一個數據庫 &#xff0c; 我是用的是vmware 虛擬機

深入理解分布式搜索引擎 ElasticSearch,并能基于 ELK+Kafka 搭建分布式?志收集系統

Elasticsearch是一個基于Lucene的分布式、多租戶能力的全文搜索引擎。它提供了RESTful web接口和分布式多用戶能力的全文搜索引擎&#xff0c;基于Apache許可證發行。以下是對Elasticsearch的深入理解以及如何基于ELK&#xff08;Elasticsearch、Logstash、Kibana&#xff09;加…

npm緩存深度解析:理解、使用與清除指南

&#x1f31f; npm緩存深度解析&#xff1a;理解、使用與清除指南 npm&#xff08;Node Package Manager&#xff09;是JavaScript編程語言的包管理器&#xff0c;廣泛用于Node.js應用程序。它不僅幫助我們安裝和管理項目依賴&#xff0c;還擁有一個強大的緩存機制來加速這一過…

[論文筆記] BlendedDataset blend goes out of bounds for list 34 for valid split

報錯&#xff1a; Traceback (most recent call last):File "/mnt/cpfs/kexin/dlc_code/qwen2/Pai-Megatron-Patch/examples/qwen2/pretrain_qwen.py", line 211, in <module> (<megatron.core.datasets.gpt_dataset.GPTDataset object at 0x7f491886bf10&…

《昇思25天學習打卡營第8天|CarpeDiem》

《昇思25天學習打卡營第8天|CarpeDiem》 模型訓練構建數據集定義神經網絡模型定義超參、損失函數和優化器超參損失函數優化器 訓練與評估 打卡 今天是昇思25天學習打卡營的第8天&#xff0c;終于迎來 模型訓練 的部分了&#xff01;&#xff01;&#xff01; 興奮 發癲 模型訓…

SSH遠程命令執行漏洞(CVE-2024-6387)驗證

0x01、漏洞名稱 OpenSSH遠程代碼執行漏洞 &#xff08;CVE-2024-6387&#xff09; 0x02、漏洞簡介 ? OpenSSH是SSH&#xff08;Secure SHell&#xff09;協議的開源實現&#xff0c;它通過不安全的網絡在兩個不受信任的主機之間提供安全的加密通信。OpenSSH 廣泛用于基于Un…

數據庫。

數據庫安全性 論述題5’ 編程題10’ sql語言實現權限控制 一、概述 1、不安全因素 &#xff08;1&#xff09;?授權對數據庫的惡意存取和破壞 &#xff08;2&#xff09;數據庫中重要的數據泄露 &#xff08;3&#xff09;安全環境的脆弱性 2、?主存取控制?法 gr…

【ajax實戰06】進行文章發布

本文章目標&#xff1a;收集文章內容&#xff0c;并提交服務器保存 一&#xff1a;基于form-serialize插件收集表單數據 form-serialize插件僅能收集到表單數據&#xff0c;除此之外的數據無法收集到 二&#xff1a;基于axios提交到服務器保存 三&#xff1a;調用alert警告…

基于KMeans的航空公司客戶數據聚類分析

&#x1f490;大家好&#xff01;我是碼銀~&#xff0c;歡迎關注&#x1f490;&#xff1a; CSDN&#xff1a;碼銀 公眾號&#xff1a;碼銀學編程 實驗目的和要求 會用Python創建Kmeans聚類分析模型使用KMeans模型對航空公司客戶價值進行聚類分析會對聚類結果進行分析評價 實…

Linux修煉之路之進程概念,fork函數,進程狀態

目錄 一&#xff1a;進程概念 二&#xff1a;Linux中的進程概念 三&#xff1a;用getpid(),getppid()獲取該進程的PID,PPID 四&#xff1a;用fork()來創建子進程 五&#xff1a;操作系統學科的進程狀態 六&#xff1a;Linux中的進程狀態 接下來的日子會順順利利&#xf…

【區塊鏈+基礎設施】深證金融區塊鏈平臺 | FISCO BCOS應用案例

作為數據交換密集型行業&#xff0c;資本市場是區塊鏈創新應用的重要領域&#xff0c;區塊鏈技術可以有效解決諸多痛點問題。比 如&#xff0c;針對信息不對稱的問題&#xff0c;區塊鏈技術通過將整個企業的經營活動信息上鏈&#xff0c;有效降低盡調成本&#xff0c;為投融資決…