python UIAutomator2使用超详细教程

yizhihongxing

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日

相关文章

  • Nginx配置之main events块使用示例详解

    下面我将详细讲解“Nginx配置之main events块使用示例详解”的完整攻略。 标题 1. Nginx配置之main events块使用示例详解 简介 在Nginx的配置文件中,main events块是必须的,它负责处理与Nginx服务端相关的底层IO事件,如接收连接、接收请求等等。本文将详细介绍如何配置main events块,以及两个使用示例。 …

    人工智能概览 2023年5月25日
    00
  • Go-RESTful实现下载功能思路详解

    Go-RESTful实现下载功能思路详解 简介 在Web应用程序中,下载功能通常是必需的功能之一。Go是一种功能强大的编程语言,使用它实现RESTful API来实现下载功能非常高效、方便和可靠。在本文中,我们将深入讨论如何使用Go-RESTful库实现下载功能。 步骤 本文将介绍三个主要步骤来实现下载功能: 定义RESTful路由 打开文件并将其发送到客户…

    人工智能概览 2023年5月25日
    00
  • django中cookiecutter的使用教程

    下面我将详细讲解“Django中Cookiecutter的使用教程”的完整攻略。 什么是Cookiecutter Cookiecutter是基于模板快速创建项目的工具,可以使用Cookiecutter创建项目的好处是可以快速创建符合最佳实践的项目模板,减少重复性体力劳动,提高工作效率。 Cookiecutter的安装 Cookiecutter基于Python…

    人工智能概览 2023年5月25日
    00
  • 怎样对扫描仪进行常规检测

    怎样对扫描仪进行常规检测 确认硬件连接 首先,需要确认扫描仪的硬件连接是否正常。包括电源、数据线、信号线等是否插好,并处于稳定状态。当设备接入电脑时,需要确认设备被认可,经常进行含有扫描仪的检测,以确定设备是否被正确连接。有些设备可能需要独立驱动程序,那么这时候还需要对驱动程序进行检测,以确定驱动程序是否准确安装。 确认设备与计算机的通讯 其次,需要确认设备…

    人工智能概览 2023年5月25日
    00
  • 如何优雅的在一台vps(云主机)上面部署vue+mongodb+express项目

    下面我将为你详细讲解如何优雅地在一台vps上面部署vue+mongodb+express项目的完整攻略。 确认vps环境 首先,需要确认你购买的vps已经安装好了Node.js和MongoDB。如果没有安装,需要先安装它们。具体安装方式可参考 Node.js 和 MongoDB 的官方文档。 部署Vue项目 在vps上创建一个专门存放代码的文件夹,例如/ho…

    人工智能概论 2023年5月25日
    00
  • Java单例模式下的MongoDB数据库操作工具类

    那我先简单介绍一下Java单例模式和MongoDB数据库操作。Java单例模式是一种设计模式,它可以确保一个类在整个应用程序中只有一个实例,并且提供了全局访问该实例的方式。而MongoDB是一种非关系型数据库,具有高性能、可伸缩的特点,支持大数据存储和处理。下面我将详细讲解如何在Java单例模式下编写MongoDB数据库操作工具类。 步骤一:创建单例模式类 …

    人工智能概论 2023年5月25日
    00
  • 利用Python生成随机验证码详解

    生成随机验证码是网络应用程序中广泛应用的问题。Python 是一种高级编程语言,它提供了一些内置模块来生成随机验证码。在本文中,我们将深入探讨如何利用 Python 生成随机验证码。 1. 什么是验证码? 验证码(Completely Automated Public Turing test to tell Computers and Humans Apar…

    人工智能概论 2023年5月25日
    00
  • mysql-8.0.15-winx64 解压版安装教程及退出的三种方式

    以下是“mysql-8.0.15-winx64解压版安装教程及退出的三种方式”的完整攻略: 安装前的准备 下载mysql-8.0.15-winx64解压版,下载地址:https://dev.mysql.com/downloads/mysql/。 解压下载好的zip文件,将解压出的文件夹移动到目标安装位置。 安装步骤 确认文件夹的路径,如 D:\mysql-8…

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