codecamp

百度智能小程序 脚本示例

脚本示例

智能小程序自动化 SDK 本身不提供测试框架。这意味着你可以将它与市面上流行的任意 Node.js 测试框架结合使用,以此来达到编写小程序测试用例的目的。接下来将使用 Jest 测试框架来编写一个实际的小程序自动化测试。

完整示例

以下讲解内容的完整示例可以从 点击这里 下载,确保 运行环境 符合要求后,执行以下命令,即可开始在工具中运行自动化测试。

npm install
npm run test

Tips: 如果在安装jest过程中出现下图提示,请点击“安装”。

安装Xcode命令行工具

接下来,我们分步骤对整个测试用例的编写过程进行介绍。

测试对象

这里以小程序示例为测试对象,将 小程序示例 的源码下载到本地,然后打开小程序开发者工具,将该项目导入进去。

初始化环境

新建文件夹 test 目录用于放置测试代码,执行以下命令安装依赖:

npm i swan-automator jest --save-dev

按照 快速开始 中的使用说明安装符合要求的开发者工具版本并配置运行环境。

脚本编写

现在我们准备为小程序示例的组件首页编写测试用例,如下图所示:

小程序组件示例

创建测试文件 test/component.spec.js 后,首先要做的是:

  1. 启动并连接工具
  2. 重新启动小程序到组件首页
  3. 断开连接并关闭工具

对应脚本如下:

const automator = require('swan-automator');

describe('index', () => {
    let smartProgram;
    let page;

    beforeAll(async () => {
        smartProgram = await automator.launch({
            projectPath: 'path/to/swan-demo'
        });
        page = await smartProgram.reLaunch('/pages/component/component');
    }, 50000);

    afterAll(async () => {
        await smartProgram.close();
    });
});
开发者工具项目窗口启动及初次编译需要一定时长,Jest 默认 5 秒超时太短,需修改。

1. 测试搜索框文字

  1. 通过 text 选择器获取目标元素
  2. 目标元素应该是个 text 组件
  3. 目标元素应该包含有“搜索组件和接口”的文本

对应脚本如下:

it('text', async () => {
    const text = await page.$('text');
    expect(text.tagName).toBe('text');
    expect(await text.text()).toContain('搜索组件和接口');
});

2. 测试列表项

  1. 获取列表元素集合
  2. 目标元素集的个数应该是 8 个
  3. 第一个列表元素的标题应该是“视图窗器”

对应脚本如下:

it('items', async () => {
    const lists = await page.$$('.item');
    expect(lists.length).toBe(8);
    const list = await lists[0].$('.item-desc');
    expect(await list.text()).toBe('视图容器');
});

3. 测试列表项行为

  1. 点击列表标题应该展示或隐藏子列表
  2. 点击子列表项应该会跳转到指定页面

对应脚本如下:

it('item action', async () => {
    const className = 'item-close';
    const firstItem = await page.$('.item');
    expect(await firstItem.attribute('class')).toContain(className);
    await firstItem.tap();
    expect(await firstItem.attribute('class')).toEqual(expect.not.stringContaining(className));
    await firstItem.tap();
    expect(await firstItem.attribute('class')).toContain(className);

    await firstItem.tap();
    const subItem = await page.$('.sub-item');
    await subItem.tap();
    await page.waitFor(500);
    expect((await smartProgram.currentPage()).path).toBe('pages/view/view');
});

脚本执行

编写完脚本后直接执行以下脚本:

npx jest test/component.spec.js

如果看到控制台输出以下信息,说明测试成功。

 PASS  test/component.spec.js (23.384s)
  index
    ✓ text (82ms)
    ✓ items (34ms)
    ✓ item action (642ms)

Test Suites: 1 passed, 1 total
Tests:       3 passed, 3 total
Snapshots:   0 total
Time:        24.522s, estimated 33s
Ran all test suites matching /test\/component.spec.js/i.


百度智能小程序 快速开始
百度智能小程序 Automator
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

百度智能小程序开发文档

百度智能小程序 组件

百度智能小程序 地图

百度智能小程序 画布

百度智能小程序 API

百度智能小程序 界面

百度智能小程序 关注小程序引导组件

百度智能小程序 自定义组件

百度智能小程序 媒体

百度智能小程序 设备

百度智能小程序 拨打电话

百度智能小程序 内存警报

百度智能小程序 手机联系人

百度智能小程序 用户截屏事件

百度智能小程序 第三方平台

百度智能小程序 开放接口

百度智能小程序 百度收银支付

百度智能小程序 分包预下载

百度智能小程序 数据分析

百度智能小程序 服务端

百度智能小程序 云开发

百度智能小程序 初始化

百度智能小程序 云函数

百度智能小程序 服务端初始化

百度智能小程序 服务器获取上下文

百度智能小程序 服务端云函数

百度智能小程序 开发教程

百度智能小程序 功能开发

百度智能小程序 基本原理

百度智能小程序 小程序自动化

百度智能小程序 视频教程

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }