Python UIAutomator2使用超详细教程
一、UIAutomator2简介
UIAutomator2 是 Google 开发的用于 Android 应用程序 UI 测试的一个框架。它可以对 Android 设备上的应用程序进行自动化测试,而不需要根据应用内部实现编写任何测试代码。并且它是开源的,它使用 Java API 简化了逆向工程测试。
二、UIAutomator2环境准备
- 安卓手机
- USB 连接线
- Python 3.6.x/3.7.x
- Appium-client:pip install Appium-Python-Client
- adb:Android SDK 工具中已内置
- 下载 UIAutomator2 jar 包
- 将 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技术站