如何调试 android UIAutomator ?

本文介绍如何使用maven-android-sdk-deployer简化Android SDK组件的管理,并通过具体步骤演示如何构建UIAutomator测试项目,包括依赖配置、测试脚本编写及调试技巧。

首先介绍一个 maven 依赖库: maven-android-sdk-deployer

A tool to install components of the Android SDK to use with the Maven Android Plugin.
The Maven Android SDK Deployer is a helper maven project that can be used to install the libraries necessary to build Android applications with Maven and the Android Maven Plugin directly from your local Android SDK installation.

简单来说,就是整个东西可以帮助你使用 maven 来构建 android sdk 相关的项目,解决依赖。Appium 的 bootstrap 就是用了这个依赖库。

如何使用?

这个过程中,可能你的 sdk 有些包没安装,比如 google maps,它会告诉你 build fail,没关系,别管他,除非你想要 maps,那么你先得在 android 的 sdk manager 里面安装它。

mvn install 好之后,我们就可以在 pom.xml 里面大胆的使用:

 <dependencies>
        <dependency>
            <groupId>android</groupId>
            <artifactId>android</artifactId>
            <version>4.4.2_r3</version>
        </dependency>

        <dependency>
            <groupId>android.test.uiautomator</groupId>
            <artifactId>uiautomator</artifactId>
            <version>4.4.2_r3</version>
        </dependency>
    </dependencies>
那我们创建一个新的 UIAutomator 的测试类

我使用的是 Intellij IDEA

  • 选择maven项目,如下图,之后的 groupid 和 Artifact id 就随便填写吧。

目录结构如下:

  • pom.xml 修改为如下:

注: 按官方文档应该用 junit 3, 不过试验下来用 junit4 也没出问题。
内容不要尽抄。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.testerhome</groupId>
    <artifactId>uiautomator</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>android</groupId>
            <artifactId>android</artifactId>
            <version>4.4.2_r3</version>
        </dependency>

        <dependency>
            <groupId>android.test.uiautomator</groupId>
            <artifactId>uiautomator</artifactId>
            <version>4.4.2_r3</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
        </dependency>
    </dependencies>

</project>

测试代码如下:

package com.testerhome.uiautomator;// Import the uiautomator libraries

import com.android.uiautomator.core.UiObject;
import com.android.uiautomator.core.UiObjectNotFoundException;
import com.android.uiautomator.core.UiScrollable;
import com.android.uiautomator.core.UiSelector;
import com.android.uiautomator.testrunner.UiAutomatorTestCase;

public class LaunchSettings extends UiAutomatorTestCase {

  public void testDemo() throws UiObjectNotFoundException {

    getUiDevice().pressHome();

    UiObject allAppsButton = new UiObject(new UiSelector()
        .description("Apps"));
    allAppsButton.clickAndWaitForNewWindow();

    // 进入设置菜单
    UiObject settingApp = new UiObject(new UiSelector().text("Settings"));
    settingApp.click();
    //休眠3秒
    try {
      Thread.sleep(3000);
    } catch (InterruptedException e1) {
      // TODO Auto-generated catch block
      e1.printStackTrace();
    }
    // 进入语言和输入法设置
    UiScrollable settingItems = new UiScrollable(new UiSelector().scrollable(true));

    UiObject languageAndInputItem = settingItems.getChildByText(
        new UiSelector().text("Language & input"), "Language & input", true);
    languageAndInputItem.clickAndWaitForNewWindow();
  }
}
然后根据 UIAutomator 的教程生成 jar 包

android create uitest-project -n uiautomator-example -t 1 -p uiautomator-example

ant build

adb push bin/uiautomator-example.jar /data/local/tmp/

adb shell uiautomator runtest uiautomator-example.jar -c com.testerhome.uiautomator.LaunchSettings

基本上测试脚本就运行起来了。

那么如何调试?

打开 Android Device Monitor, DDMS 的继任。

The standalone version of DDMS is deprecated.
Please use Android Device Monitor (tools/monitor) instead.

然后使用 debug 模式重新运行:

adb shell uiautomator runtest uiautomator-example.jar -c com.testerhome.uiautomator.LaunchSettings -e debug true

➜  uiautomator-example  adb shell uiautomator runtest uiautomator-example.jar -c com.testerhome.uiautomator.LaunchSettings -e debug true
Sending WAIT chunk

再看 monitor,你会发现有个红色虫子的进程,那个端口就是 debug 监听的端口。

我们再打开, intellij idea 的 debug 配置,添加一个 remote 调试,

更改端口为之前拿到的端口,然后module classpath设置为要debug的模块,保存

在主窗口,选择刚刚保存的 remote 配置,运行 debug,

顺利进入 debug 模式:

使用 `uiautomator2` 连接 Android 设备是进行 Android UI 自动化测试的重要一步。以下是详细的操作方法和示例代码。 --- ## ✅ 一、安装 uiautomator2 首先确保你已经安装了 `uiautomator2` 和 `atx-agent`: ```bash pip install uiautomator2 pip install --pre uiautomator2 # 安装最新版(可选) ``` 然后还需要在设备上安装 `atx-agent`: ```bash python -m uiautomator2 init ``` 这会自动安装必要的 APK 到连接的 Android 设备上。 --- ## ✅ 二、连接设备的方法 ### 方法 1:通过 USB 连接设备(推荐) 确保设备已通过 USB 连接,并启用 USB 调试模式。 ```python import uiautomator2 as u2 # 自动连接已连接的设备(适用于单设备) d = u2.connect() # 打印设备信息 print(d.info) ``` ### 方法 2:通过序列号连接设备(适用于多设备) 如果你有多个设备连接,可以通过设备序列号来指定连接哪一个。 ```python d = u2.connect("设备序列号") # 替换为你的设备序列号 print(d.info) ``` 你可以通过 `adb devices` 命令获取设备序列号。 ### 方法 3:通过 Wi-Fi 连接设备(远程控制) 确保设备和电脑在同一局域网中。 1. 使用 USB 连接设备并转发端口: ```bash adb tcpip 5555 adb connect <设备IP>:5555 ``` 2. 在 Python 中连接: ```python d = u2.connect("设备IP:5555") print(d.info) ``` --- ## ✅ 三、常见操作示例 ### 示例 1:启动应用 ```python d.app_start("com.example.app") # 替换为你要启动的应用包名 ``` ### 示例 2:点击屏幕某个坐标 ```python d.click(100, 100) # 点击屏幕坐标 (x=100, y=100) ``` ### 示例 3:查找并点击某个文本 ```python d(text="登录").click() ``` ### 示例 4:滑动屏幕 ```python d.swipe(100, 500, 100, 100) # 从 (100,500) 滑动到 (100,100) ``` ### 示例 5:获取当前包名 ```python print(d.current_package()) ``` --- ## ✅ 四、注意事项 - 确保设备已开启 **开发者选项** 和 **USB调试模式**。 - 如果设备连接失败,请检查 ADB 是否正常运行。 - 对于某些设备(如 MIUI),需要手动授权 USB 调试权限。 - 使用 `d.dump()` 可以查看当前页面的 UI 层次结构。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值