学会这一招,轻松玩转小程序自动化
上次给同学们介绍了 app 中混合应用自动化怎么做,今天我们再来学习下,app 自动化之——小程序自动化。
一、环境要求
- 微信版本 weixin7.0.10.apk 版本,否则 uc-devtools 检测不到 webview 无法进入 inspect 调试模式
- JDK 版本 1.8
- android-sdk 版本 29.0.2
- 微信的 webview 版本驱动版本 89
- appium==1.21.0
- uc-devtools 去官网下载最新版本即可
二、步骤
- 打开手机 usb 开发者调试模式并连接电脑
- 安装 weixin7.0.10.apk 版本,开启微信 WebView 调试模式
- 下载对应驱动(WebView),7.0.10 版本的微信是 89 版本的驱动
- 启动参数修改为微信的【包名】和【界面名】
- 增加启动参数,配置使用微信的 webview 版本(默认是使用 Android 自带的 webview)
- 增加启动参数,配置 webview 驱动路径
- 增加启动参数,中文输入兼容处理
- 操作安卓手机进入小程序入口
- 定位软件测试小程序点进去
- 获取软件测试小程序名称
- 增加启动参数,指定需要操作的小程序名称,拿到 10 步骤回去的小程序名称
- 从 native 切换到微信 webview,通过 10 步骤拿到的小程序名称切换
- 通过元素定位,在小程序 webview 中切换到【软件测试】窗口
- 在小程序中进行元素定位于与自动化操作
三、步骤详解
- 打开手机 usb 开发者调试模式并连接电脑
安卓手机开启调试模式各个品牌手机方法都不太一样,各位看官自学百度,或者参考手机厂商官方文档。 - 安装 weixin7.0.10.apk 版本,开启微信 WebView 调试模式
豌豆荚下载微信历史版本:https://www.wandoujia.com/apps/596157/history_v1840 - 下载对应驱动(WebView),7.0.10 版本的微信是 89 版本的驱动
驱动下载:http://npm.taobao.org/mirrors/chromedriver/ - 启动参数修改为微信的【包名】和【界面名】
adb shell dumpsys window windows | findstr mFocusedApp'appPackage':'com.tencent.mm','appActivity':'com.tencent.mm.ui.LauncherUI', - 增加启动参数,配置使用微信的 webview 版本
'recreateChromeDriverSessions':True, - 增加启动参数,配置 webview 驱动路径
'chromedriverExecutable':r'D:\chromeDriver\89\chromedriver.exe', - 增加启动参数,中文输入兼容处理
'unicodeKeyboard':True - 操作安卓手机进入小程序入口
size = driver.get_window_size()driver.swipe(start_x=size["width"] * 0.5,start_y=size["height"] * 0.2,end_x=size["width"] * 0.5,end_y=size["height"] * 0.9,duration=200)
print("滑动成功等待 3 秒")
time.sleep(3) - 定位软件测试小程序点进去
loc = (MobileBy.ANDROID_UIAUTOMATOR,'resourceId("com.tencent.mm:id/dd").text("软件…")')
element = wait.until(EC.visibility_of_element_located(locator=loc))
element.click()print("点击小程序成功,等待 15 秒")
time.sleep(15) - 获取软件测试小程序名称
获取进程号:adb shell dumpsys activity top | findstr ACTIVITY获取进程名称:adb shell ps 进程号 - 增加启动参数,指定需要操作的小程序名称,拿到 10 步骤回去的小程序名称
'chromeoptions':{"androidprocess":"com.tencent.mm:appbrand0"} - 从 native 切换到微信 webview,通过 10 步骤拿到的小程序名称切换
driver.switch_to.context('WEBVIEW_com.tencent.mm:appbrand0') - 通过元素定位,在小程序 webview 中切换到【软件测试】窗口all_handles = driver.window_handles
for handle in all_handles:
driver.switch_to.window(handle)loc2=(MobileBy.XPATH,'//h1[text()="软件测试"]')
try:
if wait.until(EC.visibility_of_element_located(loc2)):
passexcept Exception as e :
print("元素定位没找到继续找")
else:
print("找到了软件测试小程序窗口")
break
print("切换窗口从native切换到h5成功,等待5秒")
time.sleep(5) - 在小程序中进行元素定位于与自动化操作
四、完整代码
import time
from appium import webdriver
from appium.webdriver.common.mobileby import MobileBy
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
desired_caps = {
'automationName':'UiAutomator2',
'platformName':'Android',
'platformVersion':'9.0', #真机android系统版本号
'deviceName': 'xiaomi',
'appPackage':'com.tencent.mm',
'appActivity':'com.tencent.mm.ui.LauncherUI',
'noReset':'True',
'chromedriverExecutable':r'D:\chromeDriver\89\chromedriver.exe', #绝对路径使用
'recreateChromeDriverSessions':True, # 使用微信自带的webview
'chromeoptions':{"androidprocess":"com.tencent.mm:appbrand0"}, # 指定小程序
'unicodeKeyboard':True # 中文输入兼容处理
}driver = webdriver.Remote(command_executor='http://localhost:4723/wd/hub', desired_capabilities=desired_caps)
print("微信启动成功等待20秒")
wait = WebDriverWait(driver=driver,timeout=20)
time.sleep(20)"""==============================滑动找到小程序入口=============================="""
#滑动找到小程序
size = driver.get_window_size()
driver.swipe(start_x=size["width"] * 0.5,start_y=size["height"] * 0.2,end_x=size["width"] * 0.5,end_y=size["height"] * 0.9,duration=200)
print("滑动成功等待3秒")
time.sleep(3)"""==============================点测试小程序=============================="""
loc = (MobileBy.ANDROID_UIAUTOMATOR,'resourceId("com.tencent.mm:id/dd").text("软件…")')
element = wait.until(EC.visibility_of_element_located(locator=loc))
element.click()
print("点击小程序成功,等待15秒")
time.sleep(15)"""==============================切换到切换微信webview=============================="""
#获取所有的contexts
#all_contexts = driver.contexts
#print("获取所有的contexts:",all_contexts)
#切换到微信webview,小程序名称固定的可以写死
driver.switch_to.context('WEBVIEW_com.tencent.mm:appbrand0')
print("切换微信webview成功,等待3秒")
time.sleep(3)"""==============================切换窗口找到小程序=============================="""
#切换窗口从native切换到h5(handle,遍历获取)
all_handles = driver.window_handles
for handle in all_handles:driver.switch_to.window(handle)loc2=(MobileBy.XPATH,'try:if wait.until(EC.visibility_of_element_located(loc2)):passexcept Exception as e :print("元素定位没找到继续找")else:printbreak
print("切换窗口从native切换到h5成功,等待5秒")
time.sleep(5)"""==============================小程序中进行元素定位操作=============================="""
#web自动化元素定位,点击课程按钮
loc3 = (MobileBy.XPATH,'//a[contains(text(),"课程")]')
element3 = wait.until(EC.element_to_be_clickable(locator=loc3))
print("找到元素,等待5秒")
time.sleep(5)
element3.click()
print("小程序自动化测试成功")
学会这一招,轻松玩转小程序自动化相关推荐
- 免费小程商城系统运营方案,教你轻松玩转小程序商城
随着电商系统的不断完善,小程序也是很多企业重点运营的渠道,市场上有很多免费小程序商城系统,那么企业要如何运营好免费小程序商城系统的呢?接下来就由商人宝为你带来免费小程序商城系统运营解决方案,教您轻松玩 ...
- MacBook Pro如何切换独立显卡?学会这一招轻松解决
MacBook 系列中,MacBook Pro 的16 英寸版本是标配独立显示卡的,不过在预设中不会默认启用独立显卡. 很多不明真相的小白用户就会一头雾水:为什么 16 英寸版本实际 GPU 性能比 ...
- 看大品牌如何玩转小程序
在今年小程序的野蛮生长下,截至2018年上半年,小程序平均日活达到了2.8亿,已经覆盖了200多个细分行业,其中不乏零售类.工具类.服务类等.而小程序的出现会进一步强化微信在移动互联网中的地位,占据用 ...
- 做最漂亮的玩Android小程序第三版
做最漂亮的[玩Android小程序]V3.0 相较于第二个版本的更新: 整体重构了API请求.因为写这个小程序的时间比较早了,那个时候的玩安卓开放API还未支持HTTPS,导致无法上线小程序,所以为了 ...
- 课程规划-每天3分钟玩转小程序
嘿,乡亲们!是不是以为我要放鸽子了?我是会放鸽子的人?!12点没到,差一分钟都不算! 这一次的专题是小程序开发,按之前的规划每周一.三.五更新一篇. <每天3分钟玩转小程序>是一个和微信小 ...
- 微信小程序自动化框架minium实践,手把手带你玩minium
一.背景需求 精选小程序发生了一次线上问题,测试阶段的小程序开发码测试ok,但是小程序正式码由于打包问题,"我的订单"页面文件打包失败,导致线上用户访问我的页面白屏. 当前并不能避 ...
- android微信小程序自动填表_微信小程序自动化,记录趟过的坑!
项目思想:关键字+数据驱动混合测试 基于Android-微信小程序自动化的关键是:webview的切换 对于微信App来说如何从NATIVE切换到webview的过程 测试版本信息 1.微信版本:7. ...
- Windows10windows server 2012r2作为slave 用jenkins部署微信小程序自动化打包
背景 微信小程序的测试发布在没有 CI/CD 等相关工具的情况下,存在着如下的问题: 小程序开发助手中,同一个开发者只能显示一个开发版本 测试同事.产品经理.UI设计师找开发要二维码,或者本地拉取代码 ...
- 微信小程序自动化之miniprogram-automator快速上手
新近项目组大佬要求学习使用这个小程序自动化测试miniprogram-automator,但本小白从未接触使用过相关测试类任务,鉴于网上能查找到的相关资料也较为稀少,故在此提记我在使用过程的具体使用过 ...
最新文章
- 网络服务-RSYNC
- 【Android】3.22 示例22--LBS云检索功能
- 一本彻底搞懂MySQL索引优化EXPLAIN百科全书
- Knative 暂时不会捐给任何基金会 | 云原生生态周报 Vol. 22
- TypeSprict -- 基础类型
- java ftp 判断目录存在_java判断ftp目录是否存在的方法
- mysql 优化代码_MySQL Order by 语句优化代码详解
- Python笔记-Flask框架Get和Post参数相关
- java 栈的变量_深入Java核心:JVM中的栈和局部变量
- php一键环境包xammp 安装 phpDocumentor
- 如何在Elastic cloud上选择合适的Elasticsearch service
- 卧槽!VSCode 上竟然也能约会,谈对象了???
- Tungsten Fabric解决方案指南-Gateway MX
- vs2019运行提示脚本错误
- MSSQL 2000安装 图解
- 5G NR — 基站(Base Station)
- ZOJ - 3939(日期规律)
- python模拟登录12306_python模拟登录12306缺少cookies
- 解决无法从公司 Maven 私服下载依赖的问题
- BigBrother的大数据之旅 Day 4 Linux(4)