上次给同学们介绍了 app 中混合应用自动化怎么做,今天我们再来学习下,app 自动化之——小程序自动化。

一、环境要求

  1. 微信版本 weixin7.0.10.apk 版本,否则 uc-devtools 检测不到 webview 无法进入 inspect 调试模式
  2. JDK 版本 1.8
  3. android-sdk 版本 29.0.2
  4. 微信的 webview 版本驱动版本 89
  5. appium==1.21.0
  6. uc-devtools 去官网下载最新版本即可

二、步骤

  1. 打开手机 usb 开发者调试模式并连接电脑
  2. 安装 weixin7.0.10.apk 版本,开启微信 WebView 调试模式
  3. 下载对应驱动(WebView),7.0.10 版本的微信是 89 版本的驱动
  4. 启动参数修改为微信的【包名】和【界面名】
  5. 增加启动参数,配置使用微信的 webview 版本(默认是使用 Android 自带的 webview)
  6. 增加启动参数,配置 webview 驱动路径
  7. 增加启动参数,中文输入兼容处理
  8. 操作安卓手机进入小程序入口
  9. 定位软件测试小程序点进去
  10. 获取软件测试小程序名称
  11. 增加启动参数,指定需要操作的小程序名称,拿到 10 步骤回去的小程序名称
  12. 从 native 切换到微信 webview,通过 10 步骤拿到的小程序名称切换
  13. 通过元素定位,在小程序 webview 中切换到【软件测试】窗口
  14. 在小程序中进行元素定位于与自动化操作

三、步骤详解

  1. 打开手机 usb 开发者调试模式并连接电脑
    安卓手机开启调试模式各个品牌手机方法都不太一样,各位看官自学百度,或者参考手机厂商官方文档。
  2. 安装 weixin7.0.10.apk 版本,开启微信 WebView 调试模式
    豌豆荚下载微信历史版本:https://www.wandoujia.com/apps/596157/history_v1840
  3. 下载对应驱动(WebView),7.0.10 版本的微信是 89 版本的驱动
    驱动下载:http://npm.taobao.org/mirrors/chromedriver/
  4. 启动参数修改为微信的【包名】和【界面名】
    adb shell dumpsys window windows | findstr mFocusedApp'appPackage':'com.tencent.mm','appActivity':'com.tencent.mm.ui.LauncherUI',
  5. 增加启动参数,配置使用微信的 webview 版本
    'recreateChromeDriverSessions':True,
  6. 增加启动参数,配置 webview 驱动路径
    'chromedriverExecutable':r'D:\chromeDriver\89\chromedriver.exe',
  7. 增加启动参数,中文输入兼容处理
    'unicodeKeyboard':True
  8. 操作安卓手机进入小程序入口
    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)
  9. 定位软件测试小程序点进去
    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)
  10. 获取软件测试小程序名称
    获取进程号:adb shell dumpsys activity top | findstr ACTIVITY获取进程名称:adb shell ps 进程号
  11. 增加启动参数,指定需要操作的小程序名称,拿到 10 步骤回去的小程序名称
    'chromeoptions':{"androidprocess":"com.tencent.mm:appbrand0"}
  12. 从 native 切换到微信 webview,通过 10 步骤拿到的小程序名称切换
    driver.switch_to.context('WEBVIEW_com.tencent.mm:appbrand0')
  13. 通过元素定位,在小程序 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)
  14. 在小程序中进行元素定位于与自动化操作

四、完整代码

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("小程序自动化测试成功")

学会这一招,轻松玩转小程序自动化相关推荐

  1. 免费小程商城系统运营方案,教你轻松玩转小程序商城

    随着电商系统的不断完善,小程序也是很多企业重点运营的渠道,市场上有很多免费小程序商城系统,那么企业要如何运营好免费小程序商城系统的呢?接下来就由商人宝为你带来免费小程序商城系统运营解决方案,教您轻松玩 ...

  2. MacBook Pro如何切换独立显卡?学会这一招轻松解决

    MacBook 系列中,MacBook Pro 的16 英寸版本是标配独立显示卡的,不过在预设中不会默认启用独立显卡. 很多不明真相的小白用户就会一头雾水:为什么 16 英寸版本实际 GPU 性能比 ...

  3. 看大品牌如何玩转小程序

    在今年小程序的野蛮生长下,截至2018年上半年,小程序平均日活达到了2.8亿,已经覆盖了200多个细分行业,其中不乏零售类.工具类.服务类等.而小程序的出现会进一步强化微信在移动互联网中的地位,占据用 ...

  4. 做最漂亮的玩Android小程序第三版

    做最漂亮的[玩Android小程序]V3.0 相较于第二个版本的更新: 整体重构了API请求.因为写这个小程序的时间比较早了,那个时候的玩安卓开放API还未支持HTTPS,导致无法上线小程序,所以为了 ...

  5. 课程规划-每天3分钟玩转小程序

    嘿,乡亲们!是不是以为我要放鸽子了?我是会放鸽子的人?!12点没到,差一分钟都不算! 这一次的专题是小程序开发,按之前的规划每周一.三.五更新一篇. <每天3分钟玩转小程序>是一个和微信小 ...

  6. 微信小程序自动化框架minium实践,手把手带你玩minium

    一.背景需求 精选小程序发生了一次线上问题,测试阶段的小程序开发码测试ok,但是小程序正式码由于打包问题,"我的订单"页面文件打包失败,导致线上用户访问我的页面白屏. 当前并不能避 ...

  7. android微信小程序自动填表_微信小程序自动化,记录趟过的坑!

    项目思想:关键字+数据驱动混合测试 基于Android-微信小程序自动化的关键是:webview的切换 对于微信App来说如何从NATIVE切换到webview的过程 测试版本信息 1.微信版本:7. ...

  8. Windows10windows server 2012r2作为slave 用jenkins部署微信小程序自动化打包

    背景 微信小程序的测试发布在没有 CI/CD 等相关工具的情况下,存在着如下的问题: 小程序开发助手中,同一个开发者只能显示一个开发版本 测试同事.产品经理.UI设计师找开发要二维码,或者本地拉取代码 ...

  9. 微信小程序自动化之miniprogram-automator快速上手

    新近项目组大佬要求学习使用这个小程序自动化测试miniprogram-automator,但本小白从未接触使用过相关测试类任务,鉴于网上能查找到的相关资料也较为稀少,故在此提记我在使用过程的具体使用过 ...

最新文章

  1. 网络服务-RSYNC
  2. 【Android】3.22 示例22--LBS云检索功能
  3. 一本彻底搞懂MySQL索引优化EXPLAIN百科全书
  4. Knative 暂时不会捐给任何基金会 | 云原生生态周报 Vol. 22
  5. TypeSprict -- 基础类型
  6. java ftp 判断目录存在_java判断ftp目录是否存在的方法
  7. mysql 优化代码_MySQL Order by 语句优化代码详解
  8. Python笔记-Flask框架Get和Post参数相关
  9. java 栈的变量_深入Java核心:JVM中的栈和局部变量
  10. php一键环境包xammp 安装 phpDocumentor
  11. 如何在Elastic cloud上选择合适的Elasticsearch service
  12. 卧槽!VSCode 上竟然也能约会,谈对象了???
  13. Tungsten Fabric解决方案指南-Gateway MX
  14. vs2019运行提示脚本错误
  15. MSSQL 2000安装 图解
  16. 5G NR — 基站(Base Station)
  17. ZOJ - 3939(日期规律)
  18. python模拟登录12306_python模拟登录12306缺少cookies
  19. 解决无法从公司 Maven 私服下载依赖的问题
  20. BigBrother的大数据之旅 Day 4 Linux(4)

热门文章

  1. 大数据Kudu(二):Kudu架构
  2. 机器人建模中移动关节如何建立坐标系_案例(一)三自由度机器人模型建立
  3. C#/VB.NET语法的比较 转
  4. 用python写一个排班脚本
  5. Maven高级-私服
  6. AP模式中多重基础服务集(Multi-BSS)下帧的接收
  7. 2023备战金三银四,Python自动化软件测试面试宝典合集(十四)
  8. 简单描述模型的鲁棒性和泛化性的区别
  9. 现代城市地图场景RPG Maker MV游戏素材
  10. Windows7下注册表修改右键新建快捷键