基于puppeteer的封装实战

一、Hades介绍

Hades自动化框架介绍

源码

https://github.com/puppeteer/puppeteer/
在这里插入图片描述

同时,想要更好的去使用该项目,需要一定的JavaScript语法基础,可以参考下JavaScript教程

二、从0到1安装

基础环境安装
安装Nodejs,https://nodejs.org/en/download/ 安装有点慢,需要耐心等待
验证是否已经安装成功
在这里插入图片描述

初始化项目
新建UI自动化项目saas-uitest
执行 yarn install,安装依赖环境
至此,所有环境已经安装成功,可以进行用例编写了
在这里插入图片描述

三、架构解析及Saas分层

安装完基础环境后,可进行对应repo代码的拉取,分支为https://****
在这里插入图片描述

四、常用方法介绍

– /lib/function/下封装了我们常用的公共方法和基于业务的常用方法,接下来就给大家讲一下常用的公共方法:

1、常用的操作方法

op-common.js 常用操作方法

    logout,                 //封装登出方法
    setText,                // 选中文本框,并输入文本
    getElementAttribute,    // 获取某元素的属性值,如class、href
    getElementText,         // 获取某元素的文本值
    getElementsText,        // 获取批量元素的文本值
    getElementPosition,     // 获取某元素的位置坐标:boundingBox

    pressEsc,               // 按键盘Esc键,可以取消模型选中状态
    pressEnter,             // 按回车键
    clickConfirm,           // 点击确定、确认按钮
    clickCancel,            // 点击取消按钮
    clickCloseButton,       // 点击弹窗上的关闭按钮
    setCheckBoxValue,       // 设置checkbox勾选状态

    waitForDisappear,       // 等待某项元素消失
    responseInterception,   // 拦截页面请求,并得到返回值。在触发请求操作前调用

    hoverElement,           //将鼠标hover到指定的selector,若有多个匹配的元素, hover第一个
    hoverElementByText,     //鼠标hover到指定的text,若有多个匹配的元素

    openPanguMenu,          //封装通用的盘古应用进入方法

check-common.js 常用check函数

    checkPageTitleEqual,        // 验证当前page的title值
    checkIsElementExist,        // 验证某元素是否存在
    checkAttrValueEqual,        // 验证某元素属性值
    checkAttrValueContain,      // 验证某元素属性是否包含 期望文本
    checkTextEqual,             // 验证某元素文本值
    checkTextContain,           // 验证某元素文本值 是否包含期望文本
    checkTextNotContain,        // 验证某元素文本值 是否不包含某期望文本
    checkIsTextExist,           // 验证某项文本是否存在,可用于验证toast
    checkImgDiff,               // 图片对比校验,比对结果一定精度范围内认为通过
    checkIsPageUrlExist,        // 根据url判断page是否存在,可用于验证跳转新页面的场景

二次封装函数的好处在于,可以对某类操作进行统一处理,方便复用,减少业务用例的冗余
在这里插入图片描述
在这里插入图片描述

我们能用到的操作基本都在这里面涵盖了。

在这里插入图片描述

四、写一个Demo


/**
 * @Description 查看方案详情场景测试用例
 */
//导入pybell依赖包
const { pyBell } = require("@qunhe/pybell")
//获取用户列表
const { UserList: { User }, DesignList} = require("../../global/configs")
//获取selector信息
let {commonSelector, designSelector} = require("../../lib/selector");
//获取function
const {
    commonOption,
    checkCommon, opSaasDesign, saasDesignOption

} = require("../../lib/function")
const {userCommon} = require("@qunhe/pybell-extend-user-common");

/* 配置合适的timeOut */

//常量const、let局部变量
const timeout_case = 800 * 1000

let copyDesign

describe("方案详情页", () => {
    //全局前置条件
    beforeAll(async () => {
        await commonOption.login(User)
    },timeout_case)

    //全局后置条件
    afterAll(async () => {
        //await commonOption.logout()
    },timeout_case)
    //case前置条件
    beforeEach(async () => {
        //每个用例的执行前置条件
        await saasDesignOption.openDesignList()
    },timeout_case)
    afterEach(async () => {
        await pyBell.log("Test AfterEach")
    })


    test("方案列表页-展示",async () => {
        saasDesignOption.findDesignOfName("方案1")
        await pyBell.sleep(10000)
    },timeout_case)

}
)

五、编码规范

1、常量使用 const进行命名,并使用"//"备注说明:const timeout_designList = 3 * 1000 //**timeout参数

2、局部变量使用let进行命名,并使用"//"备注说明:let copyDesign

3、时间秒级设定统一使用timeout_***开头

4、function格式:op- 业 务 名 . j s s e l e c t o r 格 式 e l − {业务名}.js selector格式 el- .jsselectorel{业务名}.js

5、操作方法和元素尽量放到lib下,方便维护与复用

6、两个相同元素的定位:推荐使用前置父节点进行定位

7、自定义方法,要给出注解:

/**

  • @apiDescription 获取元素的坐标值
  • @apiParam {String} selector 控件定位
  • @return {Object} 返回元素的坐标对象,例如:{x: 100, y:100}
    */

六、其他

Xpath定位方式: https://testerhome.com/topics/20296

注意点:

两个相同元素时,要会使用父节点组合定位
$x{ xpath }调试台组合调试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值