先看实现效果!
本文要点
使用Python实现Android自动化测试
基于uiautomator2+Appium的MuMu模拟器自动化测试实战
MuMu模拟器环境配置要点
uiautomator2与Appium框架联合使用技
一、环境准备
- MuMu模拟器12(Android 12)
- Python 3.8+
- Appium Server
- Android SDK Platform-Tools
- node.js
- ADB
1.1实现步骤
cd切换到Android sdk路径
cd D:\SDK\platform-tools
连接MuMu模拟器
-
adb connect 127.0.0.1:输入你自己的调试号 adb devices
二、 初始化atx-agent
-
import uiautomator2 as u2 # 初始化设备连接 d = u2.connect("") # 自动安装守护进程 d.healthcheck()
三、使用uiautomator2实现元素分析
import uiautomator2 as u2 import csv import os from datetime import datetime import xml.etree.ElementTree as ET # 连接到MuMu模拟器 d = u2.connect("") # 打印当前页面所有元素 hierarchy = d.dump_hierarchy() print(hierarchy)
四、自动化实现
import time from appium import webdriver from appium.webdriver.common.appiumby import AppiumBy from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from appium.options.android import UiAutomator2Options appium_server_url = '' # 根据需求修正后的配置参数 options = UiAutomator2Options() options.platform_name = 'Android' options.platform_version = '' options.device_name = 'emulator-5554' options.automation_name = 'UiAutomator2' options.app_package = '' # 修正为目标APP包名 options.app_activity = '' # options.no_reset = True options.auto_grant_permissions = True # 自动处理权限弹窗 # 初始化驱动 driver = webdriver.Remote(appium_server_url, options=options) wait = WebDriverWait(driver, 20) def validate_element(locator, description): """带验证的增强元素定位""" element = wait.until(EC.presence_of_element_located(locator)) print(f"√ 成功定位到 {description}") return element try: print(">>> 正在启动大麦APP...") # 处理启动页(如有) time.sleep(5) # 等待应用初始化 # 步骤1:点击搜索按钮 search_btn = validate_element( (AppiumBy.ID, 'cn.damai:id/homepage_header_search_btn'), "首页搜索按钮" ) search_btn.click() print("已点击搜索入口") # 步骤2:定位输入框 time.sleep(2) # 等待搜索页加载 input_field = validate_element( (AppiumBy.ID, 'cn.damai:id/header_search_v2_input'), "搜索输入框" ) # 步骤3:输入关键词 input_field.send_keys("时代少年团") print("已输入搜索关键词") # 输入后验证文本 if input_field.text != "时代少年团": print("警告:输入内容可能未正确显示,尝试重新输入") input_field.clear() input_field.send_keys("时代少年团") # 步骤4:提交搜索 driver.press_keycode(66) # 回车键 print("已发送回车指令") # 验证搜索结果 try: result = wait.until(EC.presence_of_element_located( (AppiumBy.XPATH, '//*[contains(@text, "时代少年团")]') )) print(f"验证成功:找到包含关键词的条目 - {result.text[:15]}...") except: print("警告:未找到明确的结果标识,继续执行") except Exception as e: driver.save_screenshot('damai_error.png') print(f"!!! 执行异常: {str(e)}") print("当前页面结构快照:") print(driver.page_source[:1000]) # 截取部分页面源码 finally: # 关闭会话 time.sleep(3) driver.quit() print(">>> 测试会话已终止 <<<")
五、总结 - 在前期环境准备踩了很多坑,还有一些sdk没有自带定位器选择的工具,所以就自行打印保存到csv里面,也可以方便后面用到的时候直接拿来用,resourceid的话一般是不会变的,因为自己做过一个Android系统,所以对这些appium连接模拟器有一点了解,大概三小时就成功就跑通了一个demon,以后会考虑深入了解,配合UI自动化和接口自动化,实现一些功能的串联操作。