【appium+poco+airtest+python】微信内置浏览器h5与小程序的自动化测试

H5自动化

一、环境安装

1.安装安卓sdk
2.安装appium
3.安装airtest ide
4.安装python3.7(3.7版本敲重点,后面会解释)

二、实现思路

就我个人的经验而言,做自动化就两方面。一个是元素定位,一个是操作元素。那么首先要进行对于h5页面的定位,只要定位到元素了,操作元素就是c+v了。

三、h5元素定位

1.adb连接手机/模拟器,具体连接步骤不做描述
2.打开微信,在文件传输助手中输入网址并进入
http://debugtbs.qq.com
如果这个页面打不开就先打开这个链接
http://debugxweb.qq.com/?inspector=true
打开后如图:
勾选TBSInspector调试选项,即可获取h5页面的元素
在这里插入图片描述

3.打开谷歌浏览器进入网址chrome://inspect#devices
此时记得保证手机内打开被测网页,点击对应网页链接下方的inspect进入调试页面
坑:理论上说,会出现404页面,因为这里需要FQ下载组件。
解决方案:
1.使用软件FQ
2.使用离线包,我用的是https://www.cnblogs.com/slmk/p/9832081.html在这里购买的离线包,亲测能用,购买价格18,各位按需取舍。(如果卖家看到能不能包我个无限量更新)
在这里插入图片描述
进入之后就可以定位了,跟浏览器F12定位一样,就不过多描述。

四、操作元素/书写自动化脚本

1.打开ide新建python文件,安装appium库。各个ide安装方式不同,这里不多描述。本人使用的是vscode
2.appium头部配置

desired_caps = {
   
   }
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'
<think>我们正在讨论微信应用控件元素自动化操作方法。根据用户的问题,用户希望了解如何操作微信应用中的控件元素,特别是针对微信小程序内的元素操作。 参考已有的引用内容: - 引用[1]提到了Minium框架,这是微信官方推出的自动化测试框架,支持Python,可以直接操作小程序元素、触发事件、获取和设置页面数据等。 - 引用[2]提到基于图像识别的自动化框架(如sikuli)存在维护困难的问题,因此不推荐。 - 引用[3]和[4]提到了AppiumAirtest,其中Appium是常用的移动端自动化测试框架,支持原生App和微信小程序Airtest则基于图像识别和控件识别。 因此,我们可以推荐以下几种方法: 1. **使用Minium(微信官方框架)**:专门为微信小程序设计,提供了丰富的API来操作小程序元素,包括触发事件、获取数据等。 2. **使用Appium**:通过Appium测试微信小程序需要切换到小程序的WebView上下文,然后使用WebDriver API操作元素。 3. **使用Airtest**:基于图像识别和控件识别,适合快速编写脚本,但维护性可能不如Minium和Appium。 下面将详细介绍每种方法的关键步骤和示例代码。 ### 1. 使用Minium操作微信小程序元素 Minium是微信官方推出的自动化测试框架,支持直接操作小程序元素。 #### 环境准备 安装Minium: ```bash pip install minium ``` #### 示例代码 以下示例展示如何使用Minium定位小程序元素并操作: ```python import minium class MiniTest(minium.MiniTest): def test_click_button(self): # 启动小程序 self.app.navigate_to("/pages/index/index") # 通过选择器定位按钮元素并点击 button = self.page.get_element("button", inner_text="点击我") button.click() # 验证点击后的效果,例如检查某个文本 result = self.page.get_element(".result-text").inner_text self.assertEqual("点击成功", result) ``` Minium提供了丰富的选择器(如CSS选择器)来定位元素,并支持多种操作(点击、输入等)。 ### 2. 使用Appium操作微信小程序元素 Appium是通用的移动端自动化测试框架,支持微信小程序。但需要注意,微信小程序运行在WebView中,因此需要切换到WebView上下文。 #### 环境准备 - 安装Appium Server - 安装Appium Python客户端:`pip install Appium-Python-Client` - 配置Desired Capabilities(包括设备信息、appPackage、appActivity等) #### 关键步骤 1. 启动微信并进入小程序页面。 2. 获取当前所有的上下文(contexts),并切换到WebView上下文。 3. 使用Selenium WebDriver的方法操作元素。 #### 示例代码 ```python from appium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC desired_caps = { "platformName": "Android", "deviceName": "your_device", "appPackage": "com.tencent.mm", "appActivity": ".ui.LauncherUI", "noReset": True # 避免每次重置微信 } driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) # 等待微信主界面加载 WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.ID, "com.tencent.mm:id/cj_"))) # 进入小程序(这里需要根据实际情况操作,比如点击发现页的小程序入口) # 假设已经进入小程序,然后获取所有上下文 contexts = driver.contexts # 小程序会有一个WEBVIEW_com.tencent.mm:appbrand0的上下文 webview_context = None for context in contexts: if "WEBVIEW_com.tencent.mm" in context: webview_context = context break if webview_context: driver.switch_to.context(webview_context) # 现在可以使用WebDriver操作元素 # 例如,通过CSS选择器定位元素 element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, ".button-class")) ) element.click() else: print("未找到WebView上下文") driver.quit() ``` ### 3. 使用Airtest操作微信小程序元素 Airtest支持图像识别和控件识别(Poco),对于微信小程序,可以使用Poco的Android原生控件识别或切换到小程序内的元素。 #### 环境准备 - 下载Airtest IDE:http://airtest.netease.com/ - 安装Poco:`pip install pocoui` #### 示例代码(使用Poco) ```python from airtest.core.api import * from poco.drivers.android.uiautomation import AndroidUiautomationPoco # 连接设备 auto_setup(__file__) poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False) # 启动微信 start_app("com.tencent.mm") # 进入小程序(通过图像识别点击小程序入口) touch(Template("小程序的图标.png")) # 切换到小程序后,使用Poco定位小程序内的元素 # 注意:小程序内的元素需要以Poco支持的方式定位,可能需要开启Poco的调试模式 poco("button", text="点击我").click() ``` ### 总结 - **Minium**:微信官方推荐,对小程序支持最好,但仅适用于微信小程序。 - **Appium**:通用性强,支持原生App和WebView,但配置复杂,需要处理上下文切换。 - **Airtest**:适合快速开发,图像识别和控件识别结合,但图像识别可能受UI变化影响。 根据项目需求选择合适的方法。如果是专门针对微信小程序自动化,推荐使用Minium;如果同时需要覆盖原生App和其他应用,则可以选择AppiumAirtest。 ### 相关问题 1. 如何选择适合的微信小程序自动化测试框架? 2. 使用Appium测试微信小程序时,如何解决WebView上下文切换的问题? 3. Minium框架支持哪些小程序特有的操作? 4. 在微信小程序自动化中,如何处理动态加载的元素?</think>### 微信应用控件元素自动化操作方法 针对微信应用(含小程序)的控件元素自动化操作,主要有以下三种技术方案,各有特点: #### 1. **Minium(官方推荐)** 微信官方推出的自动化框架,直接操作小程序控件元素,无需依赖原生环境[^1]。 **操作步骤:** ```python import minium # 初始化小程序 mini = minium.Minium() # 定位控件并操作 button = mini.app.get_current_page().get_element("button", inner_text="提交") button.click() # 点击操作 input_box = mini.app.get_current_page().get_element("input") input_box.trigger("input", {"value": "测试文本"}) # 输入文本 # 获取控件属性 print(button.attribute("disabled")) # 输出:false ``` **优势**: - 直接访问小程序虚拟DOM - 支持Mock微信API(如wx.request) - 可获取/修改页面data数据 #### 2. **Appium(通用方案)** 通过WebView上下文操作小程序元素,需特殊配置[^4]。 **关键步骤:** ```python from appium import webdriver caps = { "platformName": "Android", "appPackage": "com.tencent.mm", "appActivity": ".ui.LauncherUI", "chromedriverExecutable": "/path/to/chromedriver" # 必须匹配微信内置WebView版本 } driver = webdriver.Remote('http://localhost:4723/wd/hub', caps) # 切换到小程序WebView上下文 webview_context = driver.contexts[-1] # 通常为WEBVIEW_com.tencent.mm:appbrand0 driver.switch_to.context(webview_context) # 操作H5元素 driver.find_element_by_css_selector(".submit-btn").click() ``` **注意点**: - 需通过`chrome://inspect`获取WebView版本 - 小程序页面加载需显式等待 - 部分组件需使用XPath定位 #### 3. **Airtest(图像+控件识别)** 适合复杂UI场景,结合图像识别和POCO控件树[^3]。 **操作示例:** ```python from airtest.core.api import * from poco.drivers.android.uiautomation import AndroidUiautomationPoco poco = AndroidUiautomationPoco() # 图像识别点击 touch(Template("wechat_icon.png")) # POCO控件操作 poco("com.tencent.mm:id/cj_").click() # 点击发现页 poco(text="小程序").click() poco("com.tencent.mm:id/cn_").child(type="android.widget.LinearLayout")[0].click() ``` **适用场景**: - 无法获取源码的封闭组件 - 动态生成的Canvas元素 - 跨平台统一脚本 --- ### 方案对比表 | 特性 | Minium | Appium | Airtest | |---------------------|--------------|----------------|---------------| | 学习曲线 | 中等 | 高 | 低 | | 小程序支持深度 | ⭐️⭐️⭐️⭐️⭐️ | ⭐️⭐️⭐️ | ⭐️⭐️⭐️ | | 原生控件操作 | 不支持 | 支持 | 支持 | | 图像识别能力 | 无 | 需扩展 | 内置强大 | | 微信官方维护 | 是 | 否 | 否 | --- ### 最佳实践建议 1. **小程序优先选Minium** 直接调用`get_element()`定位元素,避免上下文切换问题[^1] 2. **混合应用用Appium** 使用UIAutomator2定位原生控件: ```python driver.find_element_by_android_uiautomator('new UiSelector().text("通讯录")') ``` 3. **复杂UI配合Airtest** 图像识别辅助定位: ```python # 先通过图像定位区域,再用POCO精确定位 pos = exists(Template("dialog_area.png")) poco = AndroidUiautomationPoco(pos) poco("btn_confirm").click() ``` 4. **通用优化技巧** - 所有方案都需添加显式等待(推荐使用WebDriverWait) - 小程序元素变化时使用XPath通配符:`//*[contains(@class, 'btn-')]` - 关闭小程序缓存:开发者工具→设置→关闭"启用代码压缩" --- ### 相关问题 1. Minium框架如何Mock微信的登录接口? 2. Appium测试微信小程序时出现`WebView not found`错误如何解决? 3. Airtest图像识别精度受屏幕分辨率影响如何处理? 4. 如何实现微信多账号切换的自动化测试? [^1]: 微信小程序UI自动化测试实践:Minium+PageObject [^2]: 微信小程序自动化亲密接触 [^3]: Appium微信小程序自动化测试 [^4]: 混合App元素定位环境部署
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值