t***@163.com
t***@163.com
  • 发布:2025-05-08 10:47
  • 更新:2026-10-21 16:58
  • 阅读:1812

uniapp + vue3 微信小程序环境下运行uni-automator自动化测试踩坑指南

分类:uni-app

最近使用了uni-automator对小程序项目进行自动化测试
由于官方文档比较简单,并没有罗列一些常见问题,再加上本身用的人就少,可以说踩尽了坑。

问题一:


抛出 spawn EINVAL 异常
这个问题困扰了我两天,常规的方法都试过了,遍阅古今史料对代码进行无数次调整也没有头绪。
后来在官方uni-automator组件的源码github下的评论区找到了方法,降node版本,降到18以下是可以的,亲测17.9.1,16.20.0都可以。

问题二:

所有的测试用例只有第一条能执行成功,后续用例结果都会变成 [object HTMLElement]

并且开发者工具中会抛出大片错误,并且点击页面元素没有交互响应。

Converting circular structure to JSON  
--> starting at object with constructor 'l'  
| property 'parentNode' -> object with constructor 'd'  
| property 'childNodes' -> object with constructor 'Array'  
--- index 0 closes the circle(env: macOS,mp,1.06.2412050; lib: 3.7.10)>

也是一个百思不得其解的问题,又耽误了我两天,最后发现是开发者工具的版本问题,当时用的是1.06.2503281,后来卸载安装了1.06.2409140是可以的。

后续遇到其他问题再更新....

0 赞 关注 分享

要回复文章请先登录或注册

superMAX1024

superMAX1024

回复 5***@qq.com :
我之前也是给 uni-app + Vue 3 项目写小程序 E2E 被这套机制折磨坏了(特别是每次还要挂着开发者工具、手动点授权弹窗、写一堆 waitFor),后来干脆换了个思路,写了个开源工具 wxa-runner:不走开发者工具远程控制,而是直接在普通无头 Chrome 里用微信官方基础库跑 mp-weixin 编译产物,用标准 Playwright 测。

因为是在浏览器里由 Playwright 直接读 DOM,不经过开发者工具跨进程通信,上面这几个坑就都不存在了:

* 直接支持 Node 18 / 20 / 22,不用降版本,也不用退回旧版微信开发者工具(跑测试时甚至不用打开开发者工具);
* 每个 test 都是全新隔离的浏览器上下文,不会出现“只有第一条成功、后面全挂”的情况;
* 不用到处硬写 waitFor(50),单条用例一般 1~2 秒就能跑完,还能多开并行。
拿你帖子里这段登录页测试举例,用 @open-wxa/wxa-runner-playwright 写出来是这样的:

```typescript
import { test, expect } from '@open-wxa/wxa-runner-playwright';

test('测试输入账号超过50位是否截取前50位', async ({ miniProgram }) => {
await miniProgram.open('pages/user/login');

const accountInput = miniProgram.current.locator('input');
await accountInput.fill('12345678901234567890123456789012345678901234567890wer');
await expect(accountInput).toHaveValue('12345678901234567890123456789012345678901234567890');

await accountInput.fill('123456');
await expect(accountInput).toHaveValue('123456');
});
```

平时不想开笨重的微信开发者工具时,也可以直接在 dist/dev/mp-weixin 目录下跑 npx wxa-runner dev . --open 在 Chrome 里调试。

项目开源在 GitHub:https://github.com/open-wxa/wxa-runner ,同样在做 uni-app + Vue 3 小程序自动化测试的同学可以试试,少踩点版本的坑。
2026-10-21 16:58
superMAX1024

superMAX1024

我之前也是给 uni-app + Vue 3 项目写小程序 E2E 被这套机制折磨坏了(特别是每次还要挂着开发者工具、手动点授权弹窗、写一堆 waitFor),后来干脆换了个思路,写了个开源工具 wxa-runner:不走开发者工具远程控制,而是直接在普通无头 Chrome 里用微信官方基础库跑 mp-weixin 编译产物,用标准 Playwright 测。

因为是在浏览器里由 Playwright 直接读 DOM,不经过开发者工具跨进程通信,上面这几个坑就都不存在了:

* 直接支持 Node 18 / 20 / 22,不用降版本,也不用退回旧版微信开发者工具(跑测试时甚至不用打开开发者工具);
* 每个 test 都是全新隔离的浏览器上下文,不会出现“只有第一条成功、后面全挂”的情况;
* 不用到处硬写 waitFor(50),单条用例一般 1~2 秒就能跑完,还能多开并行。
拿你帖子里这段登录页测试举例,用 @open-wxa/wxa-runner-playwright 写出来是这样的:

```typescript
import { test, expect } from '@open-wxa/wxa-runner-playwright';

test('测试输入账号超过50位是否截取前50位', async ({ miniProgram }) => {
await miniProgram.open('pages/user/login');

const accountInput = miniProgram.current.locator('input');
await accountInput.fill('12345678901234567890123456789012345678901234567890wer');
await expect(accountInput).toHaveValue('12345678901234567890123456789012345678901234567890');

await accountInput.fill('123456');
await expect(accountInput).toHaveValue('123456');
});
2026-10-21 16:57
w***@gmail.com

w***@gmail.com

天哪,果然是node版本的问题,牛逼,忙活三天解决这个 最后竟然是这个原因 服了
2026-04-21 16:16
5***@qq.com

5***@qq.com

我放弃了 不能自动化测试 效率太低
2026-03-25 21:34