python UIAutomator2使用超详细教程

Python UIAutomator2使用超详细教程

一、UIAutomator2简介

UIAutomator2 是 Google 开发的用于 Android 应用程序 UI 测试的一个框架。它可以对 Android 设备上的应用程序进行自动化测试,而不需要根据应用内部实现编写任何测试代码。并且它是开源的,它使用 Java API 简化了逆向工程测试。

二、UIAutomator2环境准备

  1. 安卓手机
  2. USB 连接线
  3. Python 3.6.x/3.7.x
  4. Appium-client:pip install Appium-Python-Client
  5. adb:Android SDK 工具中已内置
  6. 下载 UIAutomator2 jar 包
  7. 将 UIAutomator2 jar 包放到 connect\mui\lib 下

三、UIAutomator2使用

1. Python UIAutomator2核心 API 介绍

  • UiObject:代表一个应用程序内部 UI 元素,在屏幕上有其独立的位置和大小。
  • UiDevice:为与包含应用程序程序 UI 元素的设备上的 UI 交互提供方法的对象。
  • UiScrollable:它提供了在滚动 UI 容器(如 RecyclerView、ScrollView 等)中查找某个 UI 元素(如 CheckBox、Button 等)的方法。
  • UiSelector:用于查找特定 UI 元素。

2. 连接测试设备

from appium import webdriver

# 配置测试环境,与 Appium 连接测试仪器
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['deviceName'] = 'emulator-5554'
desired_caps['platformVersion'] = '9.0'
desired_caps['appPackage'] = 'com.android.settings'
desired_caps['appActivity'] = 'com.android.settings.Settings'
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)

3. 调用UIAutomator2 API

from appium import webdriver
from time import sleep

# 配置测试环境,与 Appium 连接测试仪器
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['deviceName'] = 'emulator-5554'
desired_caps['platformVersion'] = '9.0'
desired_caps['appPackage'] = 'com.android.settings'
desired_caps['appActivity'] = 'com.android.settings.Settings'
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)

# 点击打开“WLAN”菜单
driver.find_element_by_id("com.android.settings:id/wifi_settings").click()

# 往下滑动
driver.swipe(300, 1000, 300, 200, duration=300)

# 根据关键字搜索 SSID 列表
ssid_items = driver.find_elements_by_android_uiautomator(
    'new UiSelector().textContains("SSID")')
sleep(2)

# 点击选中第一个结果
ssid_items[0].click()

# 断开 wifi 链接
driver.find_element_by_id("com.android.settings:id/forget").click()
sleep(2)

driver.quit()

这里我们打开 Android 的“设置”应用,并进入“WLAN”菜单,往下滑动,根据关键字“SSID”搜索 SSID 列表,最后选中第一个结果并断开链接。

4. 使用测试框架执行测试

import unittest
from appium import webdriver

class TestSettings(unittest.TestCase):
    def setUp(self):
        # 配置测试环境,与 Appium 连接测试仪器
        desired_caps = {}
        desired_caps['platformName'] = 'Android'
        desired_caps['deviceName'] = 'emulator-5554'
        desired_caps['platformVersion'] = '9.0'
        desired_caps['appPackage'] = 'com.android.settings'
        desired_caps['appActivity'] = 'com.android.settings.Settings'
        self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)

    def tearDown(self):
        self.driver.quit()

    def test_forget_wifi(self):
        # 点击打开“WLAN”菜单
        self.driver.find_element_by_id("com.android.settings:id/wifi_settings").click()
        # 往下滑动
        self.driver.swipe(300, 1000, 300, 200, duration=300)
        # 根据关键字搜索 SSID 列表
        ssid_items = self.driver.find_elements_by_android_uiautomator(
            'new UiSelector().textContains("SSID")')
        self.assertGreater(len(ssid_items), 0)
        # 点击选中第一个结果
        ssid_items[0].click()

        # 断开 wifi 链接
        self.driver.find_element_by_id("com.android.settings:id/forget").click()
        self.driver.find_element_by_id("android:id/button1").click()

if __name__ == '__main__':
    unittest.main()

这里我们使用 unittest 框架进行测试,其中我们断言了搜索结果不为空并且成功完成了链接断开。

结语

本文详细介绍了如何使用 Python UIAutomator2 来进行 Android 应用程序 UI 自动化测试。我相信,通过本文的介绍,你已经掌握了 UIAutomator2 的核心 API 并了解怎样使用它。如果想要了解更多,请自行搜索 UIAutomator2 文档并尝试其他 API。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python UIAutomator2使用超详细教程 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上

    以下是详细讲解“PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上”的完整攻略: 环境准备 服务器 首先需要购买一台云主机,本文以腾讯云主机 Linux+apache+mysql+php (LAMP) 环境搭建,系统为 Ubuntu Server 18.04 LTS. 云主机的购买和配置过程可以参考腾讯云官方文档。 Python环境和…

    人工智能概论 2023年5月25日
    00
  • Centos7 安装部署Kubernetes(k8s)集群实现过程

    Centos7 安装部署Kubernetes(k8s)集群实现过程 Kubernetes(k8s) 是一个强大的容器编排工具,可以用于构建和管理现代化的云原生应用。 在本篇文章中,我们将讲述如何在Centos7上部署Kubernetes(k8s)集群的实现过程。 环境准备 在部署Kubernetes(k8s)集群之前,需要进行以下准备工作: 在所有节点上安装…

    人工智能概览 2023年5月25日
    00
  • Java 使用 FFmpeg 处理视频文件示例代码详解

    Java 使用 FFmpeg 处理视频文件示例代码详解 简介 FFmpeg 是一款跨平台的视频处理工具,可以对视频文件进行比较底层的操作。本篇文章将介绍在 Java 中如何使用 FFmpeg 处理视频文件,并给出示例代码。 安装 FFmpeg FFmpeg 官网上提供了各个平台对应的二进制版本,可以直接下载使用。下载地址为:https://ffmpeg.or…

    人工智能概览 2023年5月25日
    00
  • JavaScript实现的内存数据库LokiJS介绍和入门实例

    JavaScript实现的内存数据库LokiJS介绍和入门实例 什么是LokiJS? LokiJS是一个轻量的、JavaScript实现的内存数据库,它提供了类似于MongoDB的文档数据库的数据存储、查询和修改功能,但是在内存中运行,不需要安装和配置数据库软件,在浏览器和Node.js环境中都可以运行。 LokiJS提供了非常简单的API,使得开发者可以很…

    人工智能概论 2023年5月25日
    00
  • Spring Cloud Hystrix 服务容错保护的原理实现

    Spring Cloud Hystrix 是一个用于实现服务容错保护的框架。它的原理主要是通过在服务调用链路中添加熔断器来保护服务。当服务发生异常或者调用超时时,熔断器会打开,从而防止异常扩散至整个系统,提高了服务的可用性和可靠性。 下面,我们来详细讲解 Spring Cloud Hystrix 的完整攻略。 Hystrix 的核心组件 Hystrix 的核…

    人工智能概览 2023年5月25日
    00
  • C#如何自动识别文件的编码

    C#如何自动识别文件的编码 在 C# 中,我们可以使用 System.Text.Encoding 类中的 DetectXXX 方法来自动识别文件的编码。 该类提供了以下方法来检测文件的编码: Detect(byte[] buffer):检测字节数组的编码。 Detect(Stream stream):检测流的编码。 DetectFile(String pat…

    人工智能概论 2023年5月25日
    00
  • MongoDB中如何使用JOIN操作详解

    MongoDB 数据库中没有传统关系型数据库中的 JOIN 操作,但可以通过使用 $lookup 管道来实现类似的功能。下面是关于如何使用 $lookup 管道在 MongoDB 中执行 JOIN 操作的完整攻略: 1. 环境准备 在 MongoDB 中执行 JOIN 操作,需要保证以下环境准备就绪: MongoDB 数据库已安装并运行。 在 MongoDB…

    人工智能概论 2023年5月25日
    00
  • Node.js中Bootstrap-table的两种分页的实现方法

    下面我将详细讲解一下“Node.js中Bootstrap-table的两种分页的实现方法”的完整攻略。 什么是Bootstrap-table Bootstrap-table是一个基于Bootstrap框架的,功能强大的表格插件。它支持众多的功能,如分页、排序、筛选、编辑等,同时也提供了众多的事件和API接口,方便开发者快速搭建出一张符合自己需求的数据表格。 …

    人工智能概览 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部