UiAutomator——点击难以识别的控件技巧

本文介绍了使用Rect类解决UiAutomator中点击难以识别控件的问题,该技巧对于Android自动化测试在定位坐标时非常有用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    有时候我们使用UiAutomator在查找元素的时候,发现明明元素在UiAutomator view工具中能够识别出,但是使用代码去识别的时候,却发现该元素 UiObjectNotFoundException,是偶然出现的,但是这些就够让我们的测试代码的容错性大大降低,给别人展示的时候,人家看到的是结果,发现时不时的出现错误,那就给人的影响是————你还没做好。

    其实有些元素真的出现该现象的话,我们不妨用另外一个角度去思考——坐标,让我们来举个栗子:
    图一:【播放器】元素(UiAutomatorView 观察)

这里写图片描述

    图二:【全屏按钮】元素(UiAutomatorView 观察)

这里写图片描述

    在定位的过程中,我发现【播放器】定位是一定可以定位出来的,那么我们找一下他们有什么关系??

    其实那个【全屏按钮】跟【播放器】是不同的层的,所以我们不能用getChild的方法去定位,但是它们却有必然的联系,可以发现他们的坐标,【播放器】右下角坐标是(1080,664),【全屏按钮】右下角坐标是(1080,656),我们页可以确定它们的布局是确定的,无论是大屏还是小屏,【全屏按钮】一定在【播放器】右下角。

    如果是这样我们就好办了,我们可以这样想,思路是这样:定位出【播放器】——》获取【播放器】右下角坐标——》转化成【全屏按钮】坐标——》然后使用device.click(x,y)坐标点击——》完成。
    下面是我的写的例子:
     UiObject controllerViewLayout = device.findObject(
### UI Automator XML 文件结构与使用教程 UIAutomator 是 Android 提供的一种用于自动化测试的框架,它能够识别并操作屏幕上的用户界面组件。为了实现这一功能,UIAutomator 需要解析当前屏幕上显示的视图层次结构,并将其表示为一种可读的 XML 格式。 #### 1. **UIAutomator 的 XML 文件结构** UIAutomator 将设备上当前活动窗口中的所有控件以树形结构的形式存储在一个 XML 文档中。以下是该 XML 文件的主要组成部分: - `<hierarchy>`:根节点,代表整个视图层次结构。 - `<node>`:每个子节点对应于一个具体的 UI 控件(如按钮、文本框等)。`<node>` 节点具有多个属性,这些属性描述了控件的状态和位置。常见的属性包括: - `index`: 表示此节点在其父级下的索引编号。 - `text`: 显示在控件上的文字内容。 - `resource-id`: 唯一标识符,通常由开发者定义。 - `class`: 控件所属的类名(例如 `android.widget.Button`)。 - `package`: 应用程序包名称。 - `content-desc`: 可访问性描述,有时可以用来替代 `text` 属性。 - `bounds`: 描述控件在屏幕上的矩形区域坐标 (左, 上)-(右, 下)。 下面是一个简单的 XML 示例[^1]: ```xml <hierarchy> <node index="0" text="" resource-id="com.example:id/root_view" class="android.view.View" package="com.example.app" content-desc="" bounds="[0,0][1080,1920]" /> <node index="1" text="Click Me!" resource-id="com.example:id/button_click_me" class="android.widget.Button" package="com.example.app" content-desc="" bounds="[500,800][700,1000]" /> </hierarchy> ``` #### 2. **如何获取 UIAutomator 的 XML 数据** 可以通过以下方式捕获当前应用界面上的 XML 数据: - 使用 ADB 命令调取 dump 功能: ```bash adb shell uiautomator dump /sdcard/window_dump.xml ``` 上述命令会生成一份名为 `window_dump.xml` 的文件到指定路径下,随后可通过 pull 命令下载至本地查看或进一步处理[^2]: ```bash adb pull /sdcard/window_dump.xml . ``` #### 3. **Python 中利用 uiautomator2 解析 XML 并交互** 基于 Python 的库 `uiautomator2` 不仅能模拟点击、滑动等基本动作,还可以方便地提取页面布局信息作为 XML 字符串形式返回给脚本使用者。比如执行如下代码片段即可打印出当前可见的所有控件详情: ```python import uiautomator2 as u2 d = u2.connect() # 默认连接已启动调试模式的第一台设备 print(d.dump_hierarchy()) ``` 以上方法输出的内容本质上就是前面提到的标准格式化后的 XML 版本数据流。 #### 4. **实际应用场景举例——定位特定按钮并通过其 ID 进行点击** 假设目标是要找到资源 id 设置为 `"com.example:id/login_button"` 的登录按键,则可以用这样的逻辑完成任务: ```python button_login = d(resourceId="com.example:id/login_button") if button_login.exists: button_login.click() else: print("Login Button Not Found!") ``` 这里借助了之前介绍过的 XML 结构里关于 resourceId 定义的知识点来精确定位所需元素对象的位置关系链路表达式匹配机制从而实现了精准操控目的达成效果展示说明文档链接地址引用标记. --- ###
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值