参考资料

https://developers.google.cn/codelabs/devtools-recorder?hl=zh-cn#0

https://pptr.dev/

引言

使用Web页面,做对应服务端和客户端测试时经常会碰到自动化的选择问题,服务端一般来说业务测试的都是各种各样的服务端API接口,分别模拟外部系统、其他组件或者客户端的调用。

在JS统治Web客户端开发后,基于JS以及各种其他分支(比如TS)的开发框架,使得客户端的开发迭代变得更加迅速,基于HTML5可以实现的能力也越来越强大。测试客户端时,常见的手工测试难以满足快速迭代的交付需求,也无法达到很好的守护效果,故客户端用例自动化势在必行。

当前的项目使用的框架是Selenium,运行方式是以Chrome插件的形式,外面又封了一层框架做用例集管理以及与操作系统交互的API接口(bash、python脚本等均可)。

近两天在使用Chrome进行服务端和客户端问题定界时发现,多出的2个测试中功能,其中1个叫Recorder好像挺有意思的,简单试用一下,发现意外的很易用,故做个简单的记录。

一、录制自己的用户流

关于这里的称呼,“用户流”是从官方文档里抠出来的解释,从测试人员的角度理解其实就是一个独立的用户行为组合,可以看作是1条用例,我认为怎么理解都可以。

首先选择加号,输入自己的用户流名称,然后选择开始录制。

完成需要录制的客户端操作后,点击完成录制后效果如下。能够看到,对应操作都被记录了下来。

二、查看录制的用户流

我们开始尝试着分析一下用户流的一些关键数据和支持的修改动作,首先是和selenium用例相似的,需要通过url定位到对应的界面,对应的就是Current Page,然后进行了移动Viewport的动作,相当于鼠标滚动并移动光标,然后开始准备跳转至新的页面。

再往下看,Navigate这个动作即表示当前页面进行了重新定位,页面定位到的url为https://www.liaoxuefeng.com/wiki/1016959663602400/1017804782304672,随后就能够看到显示的定位信息发生改变,到了“HTTP协议简介 - 廖雪峰的官方网站”随后我又进行了多次点击操作,其中第3次是选中了界面的元素“HTML简介”然后点击。

对应的界面操作如下,在wiki的页面选择了左侧的树状结构并点击1个叶子节点,相当于跳转到了新的页面。

最后,再次发起一个搜索栏的搜索动作,能够看到录制的结果如下,操作顺序为:找到搜索栏->修改搜索栏的内容->按下Enter键发起搜索

在搜索时,是通过selectors来找到对应的页面元素,然后通过修改value来传递值给游览器,最后按下按键来触发服务端接口调用并跳转至搜索结果的界面进行呈现。

三、修改录制的用户流

另一方面,能够通过右侧的...按钮点击后看到,单次的操作可支持调整顺序、删除、增加断点、拷贝为文本脚本的功能。前2个都是修改的常见操作,还有增加断点和拷贝为文本脚本的功能,下面就分别尝试一下。

首先是增加断电,和代码调试一样,这里是增加了用户流的断点,便于调试录制的结果,对于某个步骤加上断点后,如果选择Replay就会停在对应的断点处。这里选择在点击“WSGI接口”时加上断点,然后发起Replay即可。

附执行失败的一张截图,界面上由于没有操作展开树状图的叶子节点“HTML简介”,导致单个步骤执行超时。

如果希望修改用户流单个步骤的内容,只需要展开后双击对应的元素,即可快速完成编辑的动作,操作非常高效。

如果希望将用户流放到本地编辑和查看,可使用上面提到的copy as xxx操作,以json为例,结果如下。


{"type": "click","assertedEvents": [{"type": "navigation","url": "https://www.liaoxuefeng.com/wiki/1016959663602400/1017805396770016","title": "HTML简介 - 廖雪峰的官方网站"}],"target": "main","selectors": [["#\\31 017805396770016 > a"],["xpath///*[@id=\"1017805396770016\"]/a"],["aria/HTML简介111"]],"offsetX": 65.5,"offsetY": 22
}

三、保存和导入导出用户流

录制完成的用户流也支持导入导出功能,方便于在本地管理多个用户流,在下图的上载按钮旁边则是切换用户流的下拉列表,呈现当前Chrome打开的用户流文件,就不再赘述。

导出后的文件作为附件上传,可以进一步解读,其实应该就是满足puppeteer定义的js文件或者1个单纯的json文件。

这是导出的puppeteer JS文件,定义了对应的界面操作动作。

这是导出的json文件,可以理解为一个传统的文本用例,仅作为用户流数据导入导出,能够被Chrome Recorder的引擎所识别。

基于固定的文件结构,后续应考虑通过代码和脚本自动生成对应的用户流文件,然后再导入Chrome中执行,可用于实现业务代码和测试脚本的关联。

其中有1个细节,我们能够看到单个step执行过后,还有有1个单独的assertedEvents,用于断言当前Web界面的内容,这一块后续可以单独展开说一说,感觉支持的能力意外的强大?

四、Puppeteer初探

根据wiki百科和官方资料,puppeteer是一个用于自动化 Chrome 的Node.js库吗,属于现代网络应用程序中的测试自动化(网络测试)中的一种。可以搭配无头游览器(Headless Explorer)使用,即没有图形界面的游览器,比如Chrome现在也支持这样的特性,参见如下的说明:

https://developer.chrome.com/blog/headless-chrome/

实战参考:

https://developer.aliyun.com/article/727915

五、关于Chrome Recoder中的assertedEvents

待更新。。。

基于Puppeteer的Chrome Recorder初试相关推荐

  1. puppeteer(headless chrome)实现网站登录

    puppeteer简介 puppeteer是Chrome团队开发的一个node库,可以通过api来控制浏览器的行为,比如点击,跳转,刷新,在控制台执行js脚本等等.有了这个神器,写个爬虫,自动签到,网 ...

  2. 基于.net开发chrome核心浏览器【五】

    原文:基于.net开发chrome核心浏览器[五] 一:本篇将解决的问题 本章主要为了解决一下几个问题: 1.JsDialog的按钮错位的问题 我们开发出的浏览器,在有些操系统上调用alert,con ...

  3. 基于.net开发chrome核心浏览器【一】

    基于.net开发chrome核心浏览器[一] 基于.net开发chrome核心浏览器[二] 基于.net开发chrome核心浏览器[三] 基于.net开发chrome核心浏览器[四] 基于.net开发 ...

  4. 基于.net开发chrome核心浏览器【四】

    基于.net开发chrome核心浏览器[一] 基于.net开发chrome核心浏览器[二] 基于.net开发chrome核心浏览器[三] 基于.net开发chrome核心浏览器[四] 基于.net开发 ...

  5. 【Puppeteer】基于Puppeteer采集网页图片资源

    背景:负责的一个网页资源采集类的项目,之前是Java后台直接使用HTTP请求获取网页源码,再通过jsoup解析网页,跟据标签提取出图片.但是最近在一次客户的演练中,出现了图片漏抓的情况.具体分析网页一 ...

  6. Puppeteer -headless Chrome 的 Node.js API

    Puppeteer 是一个控制 headless Chrome 的 Node.js API .它是一个 Node.js 库,通过 DevTools 协议提供了一个高级的 API 来控制 headles ...

  7. 基于Python通过Chrome的Cookie登录百度账户

    环境 操作系统:windows 10 x64 集成环境:Visual Studio Code Python版本:v3.10.5 64位 – 解码需要os.sqlite3.win32crypt.base ...

  8. 基于FIddler实现Chrome内核下对网页进行填表操作以及原理

    由于这段时间比较匆忙,一直没来得及写博客,外加模块功能还不是很齐全~拖了好几个月哈哈. 下面言归正传.使用过易语言软件的童鞋,估计都听说过"填表"是啥玩意,其实就是通过WINDOW ...

  9. 基于python+selenium+Chrome自动化爬取巨潮资讯网A股财务报表

    转自同学的博客 引言: 网页爬虫分为静态网页爬虫和动态网页爬虫,前者是指索要获取的网页内容不需要经过js运算或者人工交互, 后者是指获取的内容必须要经过js运算或者人工交互.这里的js运算可能是aja ...

最新文章

  1. 【Sql Server】Database-sql语言的流程控制语句
  2. 【LeetCode 剑指offer刷题】字符串题6:67 把字符串转成整数
  3. 【试验】三个用于日常监控开发库与对应测试库的存储过程
  4. C++ 手动开O2优化
  5. linux 生成和使用动态链接库和静态链接库的Makefile编写
  6. “耐撕”团队 2016.03.31 站立会议
  7. DDD(Domain-Driven Design)领域驱动设计-(二)事件风暴
  8. 堆积柱形图显示总数_在Excel堆积柱形图中显示合计值
  9. 利用IP标准访问列表进行网络流量的控制
  10. python上传文件接口_Python接口测试文件上传实例解析
  11. 【阿里Java技术进阶】官方钉群直播大全(持续更新)...
  12. 获取post请求的数据
  13. 【易通慧谷】盘点供应链金融的主要模式和对商业银行领域的影响
  14. 付费会员亿时代即将来临,如何才能打造“终身俱乐部”?
  15. debian怎么安装oracle数据库,Debian上安装Oracle客户端
  16. java操作hfds----刘雯丽
  17. arcgis制作格网图
  18. 沁恒CH554 KEIL环境搭建
  19. 工具系列————教育邮箱激活Clion
  20. 【业务组件】占位图片页面,适用于移动端

热门文章

  1. 常用的http状态码 状态码大全 常见的状态码
  2. Leetcode刷题笔记之445. 两数相加Ⅱ
  3. percona-tool文档说明(4)- 监控类
  4. html盒子整体向下移动,盒子上下左右居中方法全(持续更新中)
  5. 我做淘宝7年的工作经验总结
  6. hashmap 存取原理图_HashMap的存储原理
  7. 通过Swap函数交换两个变量的值
  8. 创维E900V21E/E900V22E_S905L3B/S905L2B通刷_支持5621DS无线_完美语音线刷固件
  9. 技术分享 | Goby IP库初探
  10. 招投标舞弊的22种方式及案例