转载文章:来源(靠谱崔小拽)javascript
前端自动化测试主要在于:
变化快,不稳定,兼容性复杂
;故而,想经过较低的成本维护较为通用的自动化case比较困难。本文旨在经过page-monitor获取和分析dom结构,调研可否经过监控和分析核心dom,来进行前端自动化测试
。css
page-monitor:经过xpath获取dom节点结构,以后可视化的渲染出页面的差别。
github地址:https://github.com/fouber/pag...
基本原理:利用xpath获取页面的dom结构,存储为结构化的json,对比两次的json之间的差别,利用phantom渲染页面和差别页面
。前端
先上个初次试用的图java
# page-monitor 依赖于 phantomjs npm install phantomjs npm install page-monitor
注意:phantomJs较大,若是比较慢 能够用brew安装,而且page-monitor最多兼容phantom1.98
node
# 调整phantom为1.98 版本 MacBook-Pro:~ cuixiaohuan$ brew link phantomjs198 Linking /usr/local/Cellar/phantomjs198/1.9.8... 2 symlinks created MacBook-Pro:~ cuixiaohuan$ phantomjs -v 1.9.8
2.2 初次运行:写一个test.js 代码以下:git
var Monitor = require('page-monitor'); var url = 'http://www.baidu.com'; var monitor = new Monitor(url); monitor.capture(function(code){ console.log(monitor.log); // from phantom console.log('done, exit [' + code + ']'); });
运行效果github
MacBook-Pro:test cuixiaohuan$ node test.js { debug: [ 'mode: 11', 'need diff', 'loading: http://www.baidu.com', 'page.viewportSize = {"width":320,"height":568}', 'page.settings.resourceTimeout = 20000', 'page.settings.userAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X; en-us) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53"', 'loaded: http://www.baidu.com', 'delay before render: 0ms', 'walk tree', 'save capture [/Users/cuixiaohuan/Desktop/workspace/test/pagemonitor/test/www.baidu.com/Lw==/1461155680901]', 'screenshot [/Users/cuixiaohuan/Desktop/workspace/test/pagemonitor/test/www.baidu.com/Lw==/1461155680901/screenshot.jpg]', 'Unsafe JavaScript attempt to access frame with URL about:blank from frame with URL file:///Users/cuixiaohuan/Desktop/workspace/test/pagemonitor/test/node_modules/page-monitor/phantomjs/index.js. Domains, protocols and ports must match.' ], warning: [], info: [], error: [], notice: [] } done, exit [0]
test.js codenpm
monitor.diff(1408947323420, 1408947556898, function(code){ console.log(monitor.log.info); // diff result console.log('[DONE] exit [' + code + ']'); });
运行json
MacBook-Pro:test cuixiaohuan$ node test.js [ '{"diff":{"left":"1461155680901","right":"1461163758667","screenshot":"/Users/cuixiaohuan/Desktop/workspace/test/pagemonitor/test/www.baidu.com/Lw==/diff/1461155680901-1461163758667.jpg","count":{"add":2,"remove":2,"style":0,"text":9}}}' ] [DONE] exit [0]
经过目录和运行结果
1:每一个时间利用phantom生成一张截图【保存现场】和一个dome的tree.json【对比dom】 【生成过程看下源码】
2:diff 调用tree.json 比较区中的区别【位置,内容生成和对比过程以后看下源码?】
3:利用当时保存的截图渲染生成的结果segmentfault
1:dom的diff 是可行的。
2:page monitor 现有主要功能:抽取不一样时间段的页面作页面domdiff使用过程当中缺陷:
1:依赖太多,依赖node,依赖phantom,2:接口太少,如今直接提供的就两个一个保存现场,一个diff。不方便dom定制和阈值定制。
若是能对dom树的处理更完善一些,应用价值仍是挺高的,例如核心dom的diff,局部dom的diff,时效性dom(例如:时间tag必须变化,不变化则为bug)的变动检验,兼容性dom的check等等
下一步调研:看下源码中,分析dom生成tree过程,对比tree过程,展示tree过程。