uiautomator2的完整能力
2025-10-24
深度学习
00

目录

🚀 uiautomator2完整能力清单
1. 📸 截图能力
2. 🔍 元素查找能力
3. 🎯 元素操作能力
4. 👆 手势操作能力
5. 📱 应用控制能力
6. 🔧 设备控制能力
7. ⏰ 等待和检测能力
8. 🚀 高级功能
9. 🤖 自动化能力

🚀 uiautomator2完整能力清单

1. 📸 截图能力

  • 全屏截图
  • 区域截图
  • 实时截图

2. 🔍 元素查找能力

  • 按文字查找:d.xpath('//*[@text="设置"]')
  • 按ID查找:d(resourceId="com.example:id/button")
  • 按类名查找:d(className="android.widget.Button")
  • 按内容描述查找:d(description="搜索")
  • 组合条件查找:d.xpath('//android.widget.Button[@text="确定"]')

3. 🎯 元素操作能力

  • 点击:element.click()
  • 长按:element.long_click()
  • 双击:element.double_click()
  • 输入文字:element.set_text("Hello")
  • 清除文字:element.clear_text()

4. 👆 手势操作能力

  • 滑动:d.swipe(x1, y1, x2, y2)
  • 拖拽:d.drag(x1, y1, x2, y2)
  • 缩放:d.pinch()
  • 旋转:d.rotate()

5. 📱 应用控制能力

  • 启动应用:d.app_start("com.example.app")
  • 停止应用:d.app_stop("com.example.app")
  • 获取当前应用:d.app_current()
  • 列出所有应用:d.app_list()

6. 🔧 设备控制能力

  • 按键操作:d.press('back'), d.press('home')
  • 音量控制:d.press('volume_up')
  • 屏幕控制:d.screen_on(), d.screen_off()

7. ⏰ 等待和检测能力

  • 等待元素:element.wait(timeout=10)
  • 检测存在:element.exists
  • 等待消失:element.wait_gone()

8. 🚀 高级功能

  • 坐标操作:d.click(x, y)
  • 元素属性:element.info
  • 屏幕信息:d.window_size()
  • 设备信息:d.info

9. 🤖 自动化能力

  • 完整的UI自动化测试
  • 批量操作
  • 条件判断
  • 循环执行

示例代码:

bash
展开代码
#!/usr/bin/env python3 """ uiautomator2 完整能力演示 展示uiautomator2的所有主要功能 """ import uiautomator2 as u2 import json import os import time from datetime import datetime from PIL import Image def demo_all_capabilities(): """ 演示uiautomator2的所有能力 """ print("🚀 uiautomator2 完整能力演示") print("="*60) try: # 连接设备 d = u2.connect() print(f"📱 已连接设备: {d.info.get('productName', 'Unknown')}") print(f"📱 设备信息: {d.info}") print() # 1. 截图能力 print("📸 1. 截图功能") print("-" * 30) timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") screenshot_path = f"demo_screenshot_{timestamp}.png" d.screenshot(screenshot_path) print(f"✅ 截图已保存: {screenshot_path}") print() # 2. 元素查找能力 print("🔍 2. 元素查找功能") print("-" * 30) # 2.1 按文字查找 print("按文字查找:") text_elements = d.xpath('//*[@text]').all() print(f" 找到 {len(text_elements)} 个有文字的元素") # 2.2 按类型查找 print("按类型查找:") buttons = d.xpath('//android.widget.Button').all() textviews = d.xpath('//android.widget.TextView').all() imageviews = d.xpath('//android.widget.ImageView').all() print(f" Button: {len(buttons)} 个") print(f" TextView: {len(textviews)} 个") print(f" ImageView: {len(imageviews)} 个") # 2.3 按ID查找 print("按ID查找:") id_elements = d.xpath('//*[@resource-id]').all() print(f" 找到 {len(id_elements)} 个有ID的元素") # 2.4 按内容描述查找 print("按内容描述查找:") desc_elements = d.xpath('//*[@content-desc]').all() print(f" 找到 {len(desc_elements)} 个有内容描述的元素") print() # 3. 元素操作能力 print("🎯 3. 元素操作功能") print("-" * 30) # 3.1 点击操作 print("点击操作:") clickable_elements = d.xpath('//*[@clickable="true"]').all() print(f" 找到 {len(clickable_elements)} 个可点击元素") # 3.2 输入操作 print("输入操作:") editable_elements = d.xpath('//*[@class="android.widget.EditText"]').all() print(f" 找到 {len(editable_elements)} 个可编辑元素") # 3.3 滑动操作 print("滑动操作:") print(" 支持上下左右滑动") print(" 支持指定距离和时间的滑动") print() # 4. 等待和检测能力 print("⏰ 4. 等待和检测功能") print("-" * 30) # 4.1 等待元素出现 print("等待元素出现:") try: # 等待某个元素出现(这里用系统时间作为示例) clock_element = d.xpath('//*[@resource-id="com.android.systemui:id/clock"]') if clock_element.exists: print(" ✅ 系统时钟元素存在") else: print(" ❌ 系统时钟元素不存在") except: print(" ⚠️ 无法检测系统时钟") # 4.2 检测应用状态 print("检测应用状态:") current_app = d.app_current() print(f" 当前应用: {current_app.get('package', 'Unknown')}") print(f" 应用名称: {current_app.get('name', 'Unknown')}") print() # 5. 手势操作能力 print("👆 5. 手势操作功能") print("-" * 30) print("支持的手势:") print(" - 点击 (click)") print(" - 长按 (long_click)") print(" - 双击 (double_click)") print(" - 滑动 (swipe)") print(" - 拖拽 (drag)") print(" - 缩放 (pinch)") print(" - 旋转 (rotate)") print() # 6. 应用控制能力 print("📱 6. 应用控制功能") print("-" * 30) # 6.1 应用启动 print("应用启动:") print(" - 启动应用: d.app_start(package_name)") print(" - 停止应用: d.app_stop(package_name)") print(" - 清除应用数据: d.app_clear(package_name)") # 6.2 应用信息 print("应用信息:") installed_apps = d.app_list() print(f" 已安装应用数量: {len(installed_apps)}") print(" 前5个应用:") for i, app in enumerate(installed_apps[:5], 1): print(f" {i}. {app}") print() # 7. 设备控制能力 print("🔧 7. 设备控制功能") print("-" * 30) # 7.1 设备信息 print("设备信息:") device_info = d.info print(f" 屏幕尺寸: {device_info.get('displayWidth')}x{device_info.get('displayHeight')}") print(f" 设备型号: {device_info.get('productName', 'Unknown')}") print(f" Android版本: {device_info.get('version', 'Unknown')}") # 7.2 设备操作 print("设备操作:") print(" - 返回键: d.press('back')") print(" - 主页键: d.press('home')") print(" - 菜单键: d.press('menu')") print(" - 电源键: d.press('power')") print(" - 音量键: d.press('volume_up/volume_down')") print() # 8. 高级功能 print("🚀 8. 高级功能") print("-" * 30) # 8.1 坐标操作 print("坐标操作:") width, height = d.window_size() print(f" 屏幕中心坐标: ({width//2}, {height//2})") print(" - 点击坐标: d.click(x, y)") print(" - 滑动坐标: d.swipe(x1, y1, x2, y2)") # 8.2 元素属性获取 print("元素属性获取:") if text_elements: first_element = text_elements[0] print(f" 第一个元素信息:") print(f" 文字: {first_element.text}") print(f" 类名: {first_element.info.get('className', 'Unknown')}") print(f" 资源ID: {first_element.info.get('resourceId', 'Unknown')}") print(f" 位置: {first_element.info.get('bounds', {})}") print(f" 可点击: {first_element.info.get('clickable', False)}") print() # 9. 实际演示 print("🎬 9. 实际演示") print("-" * 30) # 9.1 获取所有交互元素 interactive_elements = [] for element in d.xpath('//*').all(): info = element.info if (info.get('clickable', False) or info.get('focusable', False) or info.get('contentDescription', '') or info.get('text', '')): interactive_elements.append({ 'text': element.text or '', 'content_desc': info.get('contentDescription', ''), 'class_name': info.get('className', ''), 'clickable': info.get('clickable', False), 'bounds': info.get('bounds', {}) }) print(f"找到 {len(interactive_elements)} 个交互元素") print("前10个交互元素:") for i, element in enumerate(interactive_elements[:10], 1): display_text = element['text'] or element['content_desc'] or '无文字' print(f" {i:2d}. {display_text}") print(f" 类型: {element['class_name']}") print(f" 可点击: {element['clickable']}") print() print("✅ 演示完成!") print("="*60) print("📚 uiautomator2 主要能力总结:") print("1. 📸 截图 - 获取手机屏幕截图") print("2. 🔍 元素查找 - 按各种条件查找UI元素") print("3. 🎯 元素操作 - 点击、输入、滑动等操作") print("4. ⏰ 等待检测 - 等待元素出现、检测应用状态") print("5. 👆 手势操作 - 各种复杂手势操作") print("6. 📱 应用控制 - 启动、停止、管理应用") print("7. 🔧 设备控制 - 控制设备按键、获取设备信息") print("8. 🚀 高级功能 - 坐标操作、属性获取等") print("9. 🤖 自动化 - 完整的UI自动化测试能力") except Exception as e: print(f"❌ 演示失败: {e}") print("请确保:") print("1. 设备已连接 (adb devices)") print("2. 已开启USB调试") print("3. 已安装uiautomator2 (pip install uiautomator2)") if __name__ == "__main__": demo_all_capabilities()
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!