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

♥ 前 言

app中混合应用自动化测试
会这一招,轻松玩转 app 中混合应用自动化测试

上次给同学们介绍了 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)):
pass
except 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,'//h1[text()="华测教育软件测试"]')
    try:
        if wait.until(EC.visibility_of_element_located(loc2)):
            pass
    except Exception as e :
        print("元素定位没找到继续找")
    else:
        print("找到了华测教育软件测试小程序窗口")
        break
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("小程序自动化测试成功")
学习上

作为一个软件测试的过来人,我想尽自己最大的努力,帮助每一个伙伴都能顺利找到工作。所以我整理了下面这份资源,现在免费分享给大家,有需要的小伙伴可以关注【公众号:开心螺蛳粉】自提!

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。在这里插入图片描述

在这里插入图片描述

行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群:1150305204,里面有各种测试开发资料和技术可以一起交流哦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/375113.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

K8S部署Harbor镜像仓库(含离线安装包harbor-offline-installer国内下载链接)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

2024/2/6学习记录

ts 因为已经学习过了 js ,下面的都是挑了一些 ts 与 js 不同的地方来记录。 安装 npm install -g typescript 安装好之后,可以看看自己的版本 ts基础语法 模块 函数 变量 语法和表达式 注释 编译 ts 文件需要用 tsc xxx.ts ,js 文件…

一句话总结Docker与K8S的关系

一句话总结:Docker只是容器的一种,它面向的是单体,K8S可以管理多种容器,它面向的是集群,Docker可以作为一种容器方案被K8S管理。下文继续具体介绍。 1、容器的核心概念 介绍这几个核心概念:OCI、CR、Runc、…

打包 iOS 的 IPA 文件

目录 摘要 引言 准备 选择证书类型 创建应用程序 设置应用程序标识和证书 配置构建设置 构建应用程序 导出IPA 签名和导出 代码案例演示 完成 总结 参考资料 摘要 本篇博客将为您介绍如何打包iOS的IPA文件。从APP提交、创建应用程序、设置应用程序标识和证书、配…

OCR文本纠错思路

文字错误类别:多字 少字 形近字 当前方案 文本纠错思路 简单: 一、构建自定义词典,提高分词正确率。不在词典中,也不是停用词,分成单字的数据极有可能是错字(少部分可能是新词)。错字与前后的…

深入探究:JSONCPP库的使用与原理解析

君子不器 🚀JsonCPP开源项目直达链接 文章目录 简介Json示例小结 JsoncppJson::Value序列化Json::Writer 类Json::FastWriter 类Json::StyledWriter 类Json::StreamWriter 类Json::StreamWriterBuilder 类示例 反序列化Json::Reader 类Json::CharReader 类Json::Ch…

消息中间件之RocketMQ源码分析(六)

Consumer消费方式 RocketMQ的消费方式包含Pull和Push两种 Pull方式。 用户主动Pull消息,自主管理位点,可以灵活地掌控消费进度和消费速度,适合流计算、消费特别耗时等特殊的消费场景。 缺点也显而易见,需要从代码层面精准地控制…

python+django+vue高校学生社团管理系统euw84

社团管理系统是一个B/S模式系统,采用django框架,MySQL数据库设计开发,充分保证系统的稳定性。在系统的测试环节,主要通过功能测试的方式,验证系统的功能设计是否符合要求,能否满足使用需求。本社团管理系统…

【实训】自动运维ansible实训(网络管理与维护综合实训)

来自即将退役学长的分享,祝学弟学妹以后发大财! 一 实训目的及意义 1.1 实训目的 1、熟悉自动化运维工具:实训旨在让学员熟悉 Ansible 这一自动化运维工具。通过实际操作,学员可以了解 Ansible 的基本概念、工作原理和使用方法…

text-generation-webui搭建大模型运行环境与踩坑记录

text-generation-webui搭建大模型运行环境 text-generation-webui环境初始化准备模型启动项目Bug说明降低版本启动项目 text-generation-webui text-generation-webui是一个基于Gradio的LLM Web UI开源项目,可以利用其快速搭建部署各种大模型环境。 环境初始化 下载…

【VSTO开发-WPS】下调试

重点2步: 1、注册表添加 Windows Registry Editor Version 5.00[HKEY_CURRENT_USER\Software\kingsoft\Office\WPP\AddinsWL] "项目名称"""2、visual studio 运行后,要选中附加到调试,并指定启动项目。 如PPT输入WPP搜…

考研高数(一阶导与二阶导)

一阶导数 导数最大的作用是判断复杂函数的单调性&#xff0c;则可用一阶导判断原函数的单调性。 一阶导数>0&#xff1a;函数单调递增&#xff1b; 一阶导数<0&#xff1a;函数单调递减&#xff1b; 一阶导数0&#xff1a;函数是常函数。 也可以通过一阶导数0的根来…

一致性哈希算法

在分布式领域中各技术组件都有实现KV形式的存储&#xff0c;在实现各类工作能力的同时还简化了算法实现。以Raft分布式协议为例&#xff0c;它通过在领导者采用KV存储来简化算法实现和共识协商&#xff0c;但同时也限制所有写请求只能在领导者节点上进行处理&#xff0c;从而导…

TS项目实战二:网页计算器

使用ts实现网页计算器工具&#xff0c;实现计算器相关功能&#xff0c;使用tsify进行项目编译&#xff0c;引入Browserify实现web界面中直接使用模块加载服务。   源码下载&#xff1a;点击下载 讲解视频 TS实战项目四&#xff1a;计算器项目创建 TS实战项目五&#xff1a;B…

龙芯安装使用搜狗输入法

CPU&#xff1a;龙芯3A6000 操作系统&#xff1a;Loongnix 桌面主题&#xff1a;Cartoon 龙芯系统切换输入法的按键一般为&#xff1a;Ctrl空格。 1 安装搜狗输入法 进入Loongnix系统自带的龙芯应用合作社&#xff0c;寻找搜狗输入法&#xff0c;点击安装。 按下Ctrl空格&…

生成树技术华为ICT网络赛道

9.生成树 目录 9.生成树 9.1.生成树技术概述 9.2.STP的基本概念及工作原理 9.3.STP的基础配置 9.4.RSTP对STP的改进 9.5.生成树技术进阶 9.1.生成树技术概述 技术背景&#xff1a;二层交换机网络的冗余性与环路 典型问题1&#xff1a;广播风暴 典型问题2&#xff1a;MA…

C++多态_C++回顾

多态的概念 通俗的说多态就是多种形态&#xff0c;具体点就是去完成某个行为&#xff0c;当不同的对象去完成时会产生出不同的概念。 什么是多态 静态的多态 静态的多态即函数重载&#xff0c;编译时是参数匹配和函数名修饰规则。 动态的多态 运行时实现&#xff0c;跟指…

(篇九)MySQL常用内置函数

目录 ⌛数学函数 ⌛字符串函数 ⌛聚合函数 ⌛日期函数 &#x1f4d0;获取当前时间 &#x1f4d0;获取时间的某些内容 &#x1f4d0;​编辑 &#x1f4d0;格式化函数 &#x1f4cf;format类型&#xff1a; ⌛系统信息函数 ⌛类型转换函数 数学函数 字符串函数 聚合函…

《计算机网络简易速速上手小册》第6章:网络性能优化(2024 最新版)

文章目录 6.1 带宽管理与 QoS - 让你的网络不再拥堵6.1.1 基础知识6.1.2 重点案例&#xff1a;提高远程办公的视频会议质量实现步骤环境准备Python 脚本示例注意事项 6.1.3 拓展案例1&#xff1a;智能家居系统的网络优化实现思路Python 脚本示例 6.1.4 拓展案例2&#xff1a;提…

Go语言每日一练 ——链表篇(三)

传送门 牛客面试笔试必刷101题 ---------------- 链表中的节点每k个一组翻转 题目以及解析 题目 解题代码及解析 package main import _"fmt" import . "nc_tools" /** type ListNode struct{* Val int* Next *ListNode* }*//*** 代码中的类名、方…