主机参考:VPS测评参考推荐/专注分享VPS服务器优惠信息!若您是商家可以在本站进行投稿,查看详情!此外我们还提供软文收录、PayPal代付、广告赞助等服务,查看详情! |
我们发布的部分优惠活动文章可能存在时效性,购买时建议在本站搜索商家名称可查看相关文章充分了解该商家!若非中文页面可使用Edge浏览器同步翻译!PayPal代付/收录合作 |
【相关学习推荐:微信小程序教程】
背景
最近,团队计划打造一个小程序自动化测试的工具,希望赋能业务人士。到: 操作一次小程序。 然后自动恢复之前的操作路径,并捕获操作过程中出现的异常,以确定本次发布是否影响小程序的基本功能。
虽然上面的解释看起来很简单,但过程中仍然存在一些困难。 第一个难点是如何记录业务人员操作小程序时的操作路径,第二个问题是如何执行记录的操作路径。 减少。
自动化SDK
对于如何恢复操作路径的问题,推荐使用官方SDK(小程序-auTomator)。
小程序自动化SDK为开发者提供了一套通过外部脚本控制小程序的解决方案,从而达到小程序自动化测试的目的。 通过该SDK,您可以:
控制小程序跳转到指定页面。 获取小程序页面数据。 获取小程序页面元素的状态。 触发小程序元素绑定事件。 将代码片段插入AppService并调用wx对象。 任意接口...
以上描述来自官方文档。 我们建议您先阅读官方文档,然后再阅读以下内容。 当然,如果您以前使用过 Puppeteer,您可以立即开始使用它。 API 基本相同。 下面简单介绍一下SDK的使用方法。
// sdkconst automator = require('miniprogram-auTomator')//启动微信开发者工具 automator.launch({ // cli工具位于微信开发者工具安装路径 // Windows安装到cli .bat under path // MacOS上,cli安装路径下 cliPath: 'path/to/cli', // 项目地址,即运行小程序的路径 projectPath: 'path /to /project',} ).then(异步小程序=>{ // miniProgram 是 IDE 启动后的实例 // 启动小程序内的索引页 const page = wait miniProgram.reLaunch('/page/index/index') // 等待 500 毫秒 waitFor(500 ) // 获取页面元素 const element = wait page.$('.main-btn') // 点击元素 wait element.tap() // 关闭IDE wait miniProgram 有一个地方叫.close ()}) 代码
。 请注意:使用SDK前必须打开开发者工具服务端口。 否则,启动会失败。
捕获用户行为
如何还原操作路径,下一步就是解决记录操作路径的问题。
小程序无法像Web那样通过事件冒泡捕获窗口中的所有事件。 幸运的是,小程序的所有页面和组件都必须通过 Page 和 Component 方法进行封装。 因此,可以重写这两个方法来拦截receive方法并判断第一个参数是否是捕获所有事件的事件对象。
// 暂时存放原生方法 constoriginPage = PageconstoriginComponent = Component// PagePage = (params) => { const names = Object.keys(params) for (const name of names) { // 执行方法拦截 if (typeof obj[name] === 'function') { params[name] = 钩子方法(name, params[name], false)} } OriginPage(params)}//重写 ComponentComponent = (params) => { if (params.methods) { const {methods } = params const names = Object.keys(methods) for (const name of names) { //执行方法拦截 if (typeofmessages[name] === 'function') {methods[name] = hookMethod(name,messages[name], true) }originComponent(params)}constookMethod = (name, method, isComponent) = > { return function(...args) { const [evt] = args // 获取第一个参数 // 判断是否为事件对象 if (evt && evt.target && evt.type) { // 记录用户的行为 } return method.apply(this, args) }}复制代码
这里的代码仅代理所有事件方法,不能用于恢复用户行为。 为了恢复用户行为,您还需要知道是否需要单击、长按或输入等事件类型。
const evtTypes = [ 'tap', // 点击'输入', // 输入'确认', // 输入'longpress' // 长按]const hook method = (name, method) => { return function(...args) { const [evt] = args // 获取第一个参数 // 判断是否为事件对象 if ( evt && evt .target && evt. type && evtTypes.includes(evt.type) // 确定事件类型 ) { // 记录用户操作 } return method.apply(this, args) }}复制代码 确定事件类型后,我们需要确定哪个元素被单击。 然而,小程序的陷阱是事件对象的目标属性没有元素的类名,但可以检索元素的数据集。
要准确获取元素,需要在构建中添加一个步骤,修改wxml文件,将所有元素的class属性复制到data-className中。
{{text}} 复制代码 // 直接搜索.toast-close,得到nullconst元素= wait page.$('.toast-close')element.tap() // 错误! // 首先我们需要通过tagName找到自定义组件 // 然后我们需要从自定义组件中找到对应的className需要找到Component元素 const element = wait page.$('toast .toast-close')element.tap()复制代码
所以在构造操作的时候,也插入元素的 tagName 必须的。
这几篇文章你可能也喜欢:
- 如何使用docker自动维护和监控容器(Docker自动运行)
- 小程序自动化测试的详细描述(小程序自动化测试工具)
- 如何在wordpress插件中添加自动发布功能(WordPress插件开发教程)
- 如何通过Systemd和Crontab实现Linux系统下服务器监控的自动化
本文由主机参考刊发,转载请注明:小程序自动化测试详解(小程序自动化测试题及答案详解) https://zhujicankao.com/123401.html
评论前必须登录!
注册