转载文章:来源(靠谱崔小拽

前端自动化测试主要在于:变化快,不稳定,兼容性复杂;故而,想通过较低的成本维护较为通用的自动化case比较困难。本文旨在通过page-monitor获取和分析dom结构,调研能否通过监控和分析核心dom,来进行前端自动化测试

一:page-monitor 介绍

page-monitor:通过xpath获取dom节点结构,之后可视化的渲染出页面的差异。
github地址:https://github.com/fouber/pag...
基本原理:利用xpath获取页面的dom结构,存储为结构化的json,对比两次的json之间的差异,利用phantom渲染页面和差异页面

先上个初次试用的图

二:初次试用

2.1 安装

# page-monitor 依赖于 phantomjs
npm install phantomjs
npm install page-monitor

注意:phantomJs较大,如果比较慢 可以用brew安装,并且page-monitor最多兼容phantom1.98

# 调整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 代码如下:

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 + ']');
});

运行效果

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]

2.2 生成对比页面

test.js code

monitor.diff(1408947323420, 1408947556898, function(code){
console.log(monitor.log.info); // diff result
console.log('[DONE] exit [' + code + ']');
});

运行

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]

2.3 对比页面效果如下图

2.4 目录初步分析

通过目录和运行结果
1:每个时间利用phantom生成一张截图【保存现场】和一个dome的tree.json【对比dom】 【生成过程看下源码】
2:diff 调用tree.json 比较区中的区别【位置,内容生成和对比过程之后看下源码?】
3:利用当时保存的截图渲染生成的结果

三:dom diff工具page monitor 调研初步结论:

  • 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过程。

 

【page-monitor 前端自动化 上篇】初步调研的更多相关文章

  1. 前端自动化开发之grunt

    上篇文章介绍了前端模块化开发工具seaJs,利用seaJs我们可以轻松实现前端的模块化编程,参见http://www.cnblogs.com/luozhihao/p/4818782.html 那么今天 ...

  2. 前端自动化部署之gulp

    1.首先需要安装node+npm(这里不再叙述,网上教程一大堆) 2.gulp全局安装:npm install -g gulp 3.cd进入到你的项目目录,这里使用demo文件夹为我的示例项目 4.在 ...

  3. Gulp构建前端自动化工作流之:常用插件介绍及使用

    在对Gulp有了一个初步的了解之后,我们开始构建一个较为完整的Gulp开发环境. 本文主要分为6个段落: 1. 构建项目目录结构(Directory Structure Build) 2. 插件介绍及 ...

  4. 用webpack实现前端自动化构建

    什么是自动化的前端构建流? 1. 自动补全css私有前缀,自动转化less\sass为css,自动转化es6\vue\jsx语法为js,自动打包小图片为base64以减少http请求,自动给js,cs ...

  5. 【page-monitor 前端自动化 下篇】 实践应用

    转载文章:来源(靠谱崔小拽) 通过page-diff的初步调研和源码分析,确定page-diff在前端自动化测试和监控方面做一些事情.本篇主要介绍下,page-diff在具体的实践中的一些应用 核心d ...

  6. (转)Bootstrap 之 Metronic 模板的学习之路 - (7)GULP 前端自动化工具

    https://segmentfault.com/a/1190000006738327 初步了解 Metronic 的结构和应用后,我们就可以在项目中应用起来了.考虑到实际项目应用时,会有很多文件需要 ...

  7. 前端自动化构建之gulp

    前言 之前学完html的基础后就去学js框架了,每次都是用脚手架搭好的文件,在无形中体验了一波前端自动化带来的方便.然后前一段时间才开始学习前端自动化. 基本介绍 gulp说得简单一点就是一个自动化把 ...

  8. 构建一个基本的前端自动化开发环境 —— 基于 Gulp 的前端集成解决方案(四)

    通过前面几节的准备工作,对于 npm / node / gulp 应该已经有了基本的认识,本节主要介绍如何构建一个基本的前端自动化开发环境. 下面将逐步构建一个可以自动编译 sass 文件.压缩 ja ...

  9. 前端自动化工具gulp自动添加版本号

    之前,我介绍了学习安装并配置前端自动化工具Gulp,觉得gulp确实比grunt的配置简单很多,于是我决定再深入学习一下gulp,就去网上查了资料,发现gulp还可以自动添加版本号,这个功能就为我平时 ...

随机推荐

  1. lightoj1062【几何(二分)】

    其实就应该想到,哪有那么简单让你直接搞出答案的几何题啊:(而且很有可能是二分? 题意: 有两个梯子,一个靠在左边墙上,一个靠在右边墙上,长度分别为 x 和 y,他们的交点距离地面高度是 c,求两个梯子 ...

  2. 小程序地区时间自定义选择器 picker

    进入微信公众平台小程序开发文档搜索 picker 点进去后下滑,点击在开发者工具中预览即可

  3. NOIp2016 愤怒的小鸟 【状压dp】By cellur925

    题目传送门 注:本文中绿鸟==猪! 这道题开始一看数据范围我们就知道是一道状压dp,因为绿鸟仅有18个,但是开始看\(m\)好像没太懂什么意思.既然确定了是状压,那就来设计状态,一般状压的状态肯定是要 ...

  4. (十二)SpringBoot 设置定时任务

    一:创建定时任务 创建core→tesks→tesk.java package com.example.demo.core.tasks; import org.springframework.sche ...

  5. [題解]luogu_P1120小木棍(搜索)

    好久以前抄的題解,現在重新抄題解做一下 1.對所有木棍從大到小排序,後用小的比較靈活 2.限制加入的木棍單調遞減,因為先/后用長/短木棍等價,反正就是那兩根 3.預處理出重複木棍的位置,防止重複搜索相 ...

  6. 存储-InfluxDB

    1 TSDB influxDB是一个time series时间序列数据库. 在监控系统的开发中,大体分为采集-存储-可视化三个大类.监控指标有很显著的时间特征数据,一般采用TSDB存储. 在TSDB中 ...

  7. p标签中的文本换行

    参考文章 word-break:break-all和word-wrap:break-word的区别 CSS自动换行.强制不换行.强制断行.超出显示省略号 属性介绍 white-space: 如何处理元 ...

  8. windows安装redis和PHP redis扩展

    1.安装Redis (1)这里选择在github官网上下载Redis,地址:Redis下载地址 下载压缩包(如下图),并解压到本地目录,我放在D:\wamp\redis\redis-windows ( ...

  9. 解决thymeleaf严格html5校验的方法

    用的是springboot加thyemleaf做静态模板. 然后会有个很烦的东西,就这个静态模板对html的格式非常严格,导致很多框架的格式都用不了,然后这里有个解除的方法: 1.在pom中添加依赖: ...

  10. Retrofit实现Delete请求

    //设置取消关注 @Headers("Content-Type:application/x-www-form-urlencoded") @HTTP(method = "D ...