1.使用uni-app官网中的自动化测试方式

uni-app自动化测试@about | uni-app官网创建项目

$ npm install -g @vue/cli# 全局安装vue-cli
$ cd ... // 切换到工程保存目录
$ vue create -p dcloudio/uni-preset-vue#alpha my-project//也可以使用vue create -p dcloudio/uni-preset-vue my-project$ cd my-project$ npm install -D jest-environment-node@26.5.2$ npm install -S puppeteer
$ npm install -S cross-env adbkit node-simctl  playwright @playwright/test

(如果下载依赖超时,使用cnpm)

package.json内容如下(如果一直报错,可以删除node_modules文件夹重新拉取所有依赖)

注意:如果执行测试用例,报错.waitFor is not Function 大概率是有依赖没安装

{"name": "my-project3","version": "0.1.0","private": true,"scripts": {"serve": "npm run dev:h5","build": "npm run build:h5","build:app-plus": "cross-env NODE_ENV=production UNI_PLATFORM=app-plus vue-cli-service uni-build","build:custom": "cross-env NODE_ENV=production uniapp-cli custom","build:h5": "cross-env NODE_ENV=production UNI_PLATFORM=h5 vue-cli-service uni-build","build:mp-360": "cross-env NODE_ENV=production UNI_PLATFORM=mp-360 vue-cli-service uni-build","build:mp-alipay": "cross-env NODE_ENV=production UNI_PLATFORM=mp-alipay vue-cli-service uni-build","build:mp-baidu": "cross-env NODE_ENV=production UNI_PLATFORM=mp-baidu vue-cli-service uni-build","build:mp-jd": "cross-env NODE_ENV=production UNI_PLATFORM=mp-jd vue-cli-service uni-build","build:mp-kuaishou": "cross-env NODE_ENV=production UNI_PLATFORM=mp-kuaishou vue-cli-service uni-build","build:mp-lark": "cross-env NODE_ENV=production UNI_PLATFORM=mp-lark vue-cli-service uni-build","build:mp-qq": "cross-env NODE_ENV=production UNI_PLATFORM=mp-qq vue-cli-service uni-build","build:mp-toutiao": "cross-env NODE_ENV=production UNI_PLATFORM=mp-toutiao vue-cli-service uni-build","build:mp-weixin": "cross-env NODE_ENV=production UNI_PLATFORM=mp-weixin vue-cli-service uni-build","build:mp-xhs": "cross-env NODE_ENV=production UNI_PLATFORM=mp-xhs vue-cli-service uni-build","build:quickapp-native": "cross-env NODE_ENV=production UNI_PLATFORM=quickapp-native vue-cli-service uni-build","build:quickapp-webview": "cross-env NODE_ENV=production UNI_PLATFORM=quickapp-webview vue-cli-service uni-build","build:quickapp-webview-huawei": "cross-env NODE_ENV=production UNI_PLATFORM=quickapp-webview-huawei vue-cli-service uni-build","build:quickapp-webview-union": "cross-env NODE_ENV=production UNI_PLATFORM=quickapp-webview-union vue-cli-service uni-build","dev:app-plus": "cross-env NODE_ENV=development UNI_PLATFORM=app-plus vue-cli-service uni-build --watch","dev:custom": "cross-env NODE_ENV=development uniapp-cli custom","dev:h5": "cross-env NODE_ENV=development UNI_PLATFORM=h5 vue-cli-service uni-serve","dev:mp-360": "cross-env NODE_ENV=development UNI_PLATFORM=mp-360 vue-cli-service uni-build --watch","dev:mp-alipay": "cross-env NODE_ENV=development UNI_PLATFORM=mp-alipay vue-cli-service uni-build --watch","dev:mp-baidu": "cross-env NODE_ENV=development UNI_PLATFORM=mp-baidu vue-cli-service uni-build --watch","dev:mp-jd": "cross-env NODE_ENV=development UNI_PLATFORM=mp-jd vue-cli-service uni-build --watch","dev:mp-kuaishou": "cross-env NODE_ENV=development UNI_PLATFORM=mp-kuaishou vue-cli-service uni-build --watch","dev:mp-lark": "cross-env NODE_ENV=development UNI_PLATFORM=mp-lark vue-cli-service uni-build --watch","dev:mp-qq": "cross-env NODE_ENV=development UNI_PLATFORM=mp-qq vue-cli-service uni-build --watch","dev:mp-toutiao": "cross-env NODE_ENV=development UNI_PLATFORM=mp-toutiao vue-cli-service uni-build --watch","dev:mp-weixin": "cross-env NODE_ENV=development UNI_PLATFORM=mp-weixin vue-cli-service uni-build --watch","dev:mp-xhs": "cross-env NODE_ENV=development UNI_PLATFORM=mp-xhs vue-cli-service uni-build --watch","dev:quickapp-native": "cross-env NODE_ENV=development UNI_PLATFORM=quickapp-native vue-cli-service uni-build --watch","dev:quickapp-webview": "cross-env NODE_ENV=development UNI_PLATFORM=quickapp-webview vue-cli-service uni-build --watch","dev:quickapp-webview-huawei": "cross-env NODE_ENV=development UNI_PLATFORM=quickapp-webview-huawei vue-cli-service uni-build --watch","dev:quickapp-webview-union": "cross-env NODE_ENV=development UNI_PLATFORM=quickapp-webview-union vue-cli-service uni-build --watch","info": "node node_modules/@dcloudio/vue-cli-plugin-uni/commands/info.js","serve:quickapp-native": "node node_modules/@dcloudio/uni-quickapp-native/bin/serve.js","test:android": "cross-env UNI_PLATFORM=app-plus UNI_OS_NAME=android jest -i","test:h5": "cross-env UNI_PLATFORM=h5 jest -i","test:ios": "cross-env UNI_PLATFORM=app-plus UNI_OS_NAME=ios jest -i","test:mp-baidu": "cross-env UNI_PLATFORM=mp-baidu jest -i","test:wx": "cross-env UNI_PLATFORM=mp-weixin jest -i"},"dependencies": {"@dcloudio/uni-app-plus": "^2.0.1-alpha-35220220719002","@dcloudio/uni-h5": "^2.0.1-alpha-35220220719002","@dcloudio/uni-helper-json": "*","@dcloudio/uni-i18n": "^2.0.1-alpha-35220220719002","@dcloudio/uni-mp-360": "^2.0.1-alpha-35220220719002","@dcloudio/uni-mp-alipay": "^2.0.1-alpha-35220220719002","@dcloudio/uni-mp-baidu": "^2.0.1-alpha-35220220719002","@dcloudio/uni-mp-jd": "^2.0.1-alpha-35220220719002","@dcloudio/uni-mp-kuaishou": "^2.0.1-alpha-35220220719002","@dcloudio/uni-mp-lark": "^2.0.1-alpha-35220220719002","@dcloudio/uni-mp-qq": "^2.0.1-alpha-35220220719002","@dcloudio/uni-mp-toutiao": "^2.0.1-alpha-35220220719002","@dcloudio/uni-mp-vue": "^2.0.1-alpha-35220220719002","@dcloudio/uni-mp-weixin": "^2.0.1-alpha-35220220719002","@dcloudio/uni-mp-xhs": "^2.0.1-alpha-35220220719002","@dcloudio/uni-quickapp-native": "^2.0.1-alpha-35220220719002","@dcloudio/uni-quickapp-webview": "^2.0.1-alpha-35220220719002","@dcloudio/uni-stat": "^2.0.1-alpha-35220220719002","@playwright/test": "^1.23.4","@vue/shared": "^3.0.0","adbkit": "^2.11.1","core-js": "^3.6.5","cross-env": "^7.0.3","flyio": "^0.6.2","node-simctl": "^7.1.0","playwright": "^1.23.4","regenerator-runtime": "^0.12.1","vue": "^2.6.11","vuex": "^3.2.0"},"devDependencies": {"@babel/runtime": "~7.17.9","@dcloudio/types": "^3.0.4","@dcloudio/uni-automator": "^2.0.1-alpha-35220220719002","@dcloudio/uni-cli-i18n": "^2.0.1-alpha-35220220719002","@dcloudio/uni-cli-shared": "^2.0.1-alpha-35220220719002","@dcloudio/uni-migration": "^2.0.1-alpha-35220220719002","@dcloudio/uni-template-compiler": "^2.0.1-alpha-35220220719002","@dcloudio/vue-cli-plugin-hbuilderx": "^2.0.1-alpha-35220220719002","@dcloudio/vue-cli-plugin-uni": "^2.0.1-alpha-35220220719002","@dcloudio/vue-cli-plugin-uni-optimize": "^2.0.1-alpha-35220220719002","@dcloudio/webpack-uni-mp-loader": "^2.0.1-alpha-35220220719002","@dcloudio/webpack-uni-pages-loader": "^2.0.1-alpha-35220220719002","@vue/cli-plugin-babel": "~4.5.19","@vue/cli-service": "~4.5.19","babel-plugin-import": "^1.11.0","cross-env": "^7.0.2","jest": "^25.4.0","jest-environment-node": "^26.5.2","mini-types": "*","miniprogram-api-typings": "*","postcss-comment": "^2.0.0","puppeteer": "^15.4.0","vue-template-compiler": "^2.6.11"},"browserslist": ["Android >= 4.4","ios >= 9"],"resolutions": {"@babel/runtime": "~7.17.9"},"uni-app": {"scripts": {}}
}

jest.config.js

注意:微信小程序 的port不设置,如果设置了大概率会报错Failed to launch wechat web devTools, please make sure http port is open

module.exports = {globalTeardown: '@dcloudio/uni-automator/dist/teardown.js',testEnvironment: '@dcloudio/uni-automator/dist/environment.js',testEnvironmentOptions: {"mp-weixin": {// port: 33489, // 默认 9420account: "", // 测试账号url:'D:/my-project3/dist/dev/mp-weixi',args: "", // 指定开发者工具参数cwd: "", // 指定开发者工具工作目录launch: true, // 是否主动拉起开发者工具teardown: "disconnect", // 可选值 "disconnect"|"close" 运行测试结束后,断开开发者工具或关闭开发者工具remote: false, // 是否真机自动化测试executablePath: "D:/桌面助手/微信web开发者工具/cli.bat", // 开发者工具cli路径,默认会自动查找,  windows: C:/Program Files (x86)/Tencent/微信web开发者工具/cli.bat", mac: /Applications/wechatwebdevtools.app/Contents/MacOS/cli},},// cli --auto D:\my-project3\dist\dev\mp-weixin --auto-port 33489testTimeout: 35000,reporters: ['default'],watchPathIgnorePatterns: ['/node_modules/', '/.git/'],moduleFileExtensions: ['js', 'json'],rootDir: __dirname,testMatch: ['<rootDir>/src/**/*test.[jt]s?(x)'],testPathIgnorePatterns: ['/node_modules/']}

测试用例index.test.js

注意点:微信小程序需要设置一定的延时时间,是为了小程序打开开发者工具时间,否则容易超时链接不上报错Async callback was not invoked within the 5000ms timeout specified by jest.setTimeout

describe('pages/index/index.vue', () => {let pagebeforeAll(async () => {// 重新reLaunch至首页,并获取首页page对象(其中 program 是uni-automator自动注入的全局对象)page = await program.reLaunch('/pages/index/index')await page.waitFor(2000)},10000)//此处设置延时是为了小程序打开开发者工具时间,否则容易超时链接不上报错it('测试下内容', async () => {// 检测首页u-link的文本内容console.log(await (await page.$('.title')).text());expect(await (await page.$('.title')).text()).toBe('Hello')})
})

2.uni-app项目使用微信小程序自动化测试方式

官网文档地址 
创建好uni-app项目后 安装miniprogram-automator

执行 npm i miniprogram-automator -D

创建 openWeixin.js文件

const automator = require('miniprogram-automator')automator.launch({cliPath: 'D:/**/微信web开发者工具/cli.bat', // 工具 cli 位置,如果你没有更改过默认安装位置,可以忽略此项projectPath: 'D:/**/dist/dev/mp-weixin', // 项目文件地址
}).then(async miniProgram => {const page = await miniProgram.reLaunch('/pages/decorationPages/home/index')await page.waitFor(15000)const element = await page.$('.title')console.log(await element.attribute('class'))await element.tap()await miniProgram.close()
})

之后执行  node openWeixin.js

uni-app项目自动化测试相关推荐

  1. 阿里p8呕心沥血整理出来的,APP UI自动化测试思路总结,速看

    首先想要说明一下,APP自动化测试可能很多公司不用,但也是大部分自动化测试工程师.高级测试工程师岗位招聘信息上要求的,所以为了更好的待遇,我们还是需要花时间去掌握的,毕竟谁也不会跟钱过不去.接下来,一 ...

  2. 切换 uniapp_万能前端框架uni app初探03:底部导航开发

    前言 本节我们使用uni app的底部导航功能,点击不同tab会显示不同页面,这个功能在实际项目开发中几乎是必备的. 一.基础知识 1.tabBar 如果应用是一个多 tab 应用,可以通过 tabB ...

  3. APP UI自动化测试:框架选择、环境搭建、脚本编写……全总结

    首先想要说明一下,APP自动化测试可能很多公司不用,但也是大部分自动化测试工程师.高级测试工程师岗位招聘信息上要求的,所以为了更好的待遇,我们还是需要花时间去掌握的,毕竟谁也不会跟钱过不去. 接下来, ...

  4. HBuilder X ——Uni app 学习笔记(一)

    HBuilder X --Uni app 学习笔记(一) 1.pages.json配置 *pages数组中第一项表示应用启动页,数组中其他项为项目中所有页面路径. enablePullDownRefr ...

  5. uni app中使用图表

    关于在uni app中运用图表 今天写项目,需要在uni app中使用图表,我使用的是ucharts. 具体操作如下 1.下载 ucharts可以直接在uni app的插件市场下载安装. 先在插件市场 ...

  6. HbuilderX:uni app踩坑之uView-ui

    HbuilderX:uni app踩坑之uView-ui 最近在自学uniapp,想找一个ui框架提高一下学习和开发的效率,于是就网上冲浪,浪来浪去,最后选择了uView-ui这款.其实有些框架我是有 ...

  7. 让HR眼前一亮:30个APP项目软件测试经验,点燃你的简历

    在求职过程中,我们都希望自己的简历能够吸引面试官的眼球,从而获得更多的面试机会.作为一名软件测试人员,丰富的实战经验是让自己脱颖而出的关键之一. 在我多年从事APP项目软件测试的工作中,我积累了大量的 ...

  8. Web端与App端自动化测试框架

    Web端与App端自动化测试框架 一.Web端与App端的区别 想了解Web端与App端自动化测试框架的区别 ,那么我们就要先来了解Web和App的区别.Web项目一般都是B/S架构,基于浏览器的,而 ...

  9. uni app(H5)中软键盘弹出,固定定位绝对定位元素位置发生错乱

    一.问题如下 最近用uni app写项目,发现H5软键盘弹起,导致我固定定位的按钮被顶了上去,如图 二.解决方法 1.让其在输入框获取焦点时隐藏 百度了许多,有让输入框获取焦点时让按钮隐藏的方法,失去 ...

  10. uni app 开发微信小程序及上线体验

    uni app 开发微信小程序及上线体验 项目创建及微信小程序AppId的申请 本次开发的是电商类的微信小程序,这里用到的是HBuilderX这个编辑器.之前用的Visual Studio Code ...

最新文章

  1. Spring 事务之@Transactional
  2. Jquery中使用定时器setInterval和setTimeout
  3. 深入理解Mysql - 内部架构与模块
  4. Java多个注解合并_Java注解合并,注解继承
  5. 第四篇、Python文件处理
  6. 强悍的 vim —— 可视模式(visual mode)
  7. OSX Finder显示隐藏文件
  8. 力扣-111. 二叉树的最小深度
  9. C#编码应注意的事项
  10. 创业基础-乐训课堂-李家华-答案
  11. android迷你世界助手52,迷你世界助手盒子刷迷你币
  12. 歌谷服务套件gms_谷歌gms框架安装器下载-安卓9谷歌服务框架app安装-游戏大玩家...
  13. python自动加减法_python实现随机加减法生成器
  14. 证券公司信息化4_最核心的IT系统是什么?柜台系统的两个主要功能?一个交易过程是怎样的?
  15. 2020美容师(初级)考试题库及美容师(初级)模拟考试
  16. 让一维指针指向二维数组空间的方法!
  17. python_17(sql)
  18. 造成计算机系统不安全的因素,造成计算机系统不安全的因素包括()。
  19. 程序猿眼中的东极岛旅游攻略
  20. yara 源码学习(一) 综述

热门文章

  1. 51nod3241 小明和他的同学们
  2. Python爬取QQ音乐内地专辑
  3. expdp和impdp需要注意的地方
  4. 根据Spring-Security安全框架搭建问答论坛系统(更新中.....)
  5. 整数拆分的两种解法(已完成)
  6. TCP协议之RST与FIN
  7. OpenGL---PBO
  8. python pandas stack_10分钟上手 Python pandas
  9. ARP是如何工作的?
  10. 大数据之数据仓库建设(二)