w-puppeteer-uitest
Version:
A uitest package for web developer.
215 lines (164 loc) • 7.38 kB
HTML
<html lang="en">
<head>
<meta charset="utf-8">
<title>exp.mjs - Documentation</title>
<script src="scripts/prettify/prettify.js"></script>
<script src="scripts/prettify/lang-css.js"></script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="styles/prettify.css">
<link type="text/css" rel="stylesheet" href="styles/jsdoc.css">
<script src="scripts/nav.js" defer></script>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<input type="checkbox" id="nav-trigger" class="nav-trigger" />
<label for="nav-trigger" class="navicon-button x">
<div class="navicon"></div>
</label>
<label for="nav-trigger" class="overlay"></label>
<nav >
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="w-puppeteer-uitest.html">w-puppeteer-uitest</a><ul class='methods'><li data-type='method'><a href="w-puppeteer-uitest.html#.build">build</a></li><li data-type='method'><a href="w-puppeteer-uitest.html#.compareB64">compareB64</a></li><li data-type='method'><a href="w-puppeteer-uitest.html#.expBuild">expBuild</a></li><li data-type='method'><a href="w-puppeteer-uitest.html#.expTest">expTest</a></li><li data-type='method'><a href="w-puppeteer-uitest.html#.getB64">getB64</a></li><li data-type='method'><a href="w-puppeteer-uitest.html#.getFiles">getFiles</a></li><li data-type='method'><a href="w-puppeteer-uitest.html#.readJson">readJson</a></li><li data-type='method'><a href="w-puppeteer-uitest.html#.test">test</a></li></ul></li></ul>
</nav>
<div id="main">
<h1 class="page-title">exp.mjs</h1>
<section>
<article>
<pre class="prettyprint source linenums"><code>import fs from 'fs'
import map from 'lodash-es/map.js'
import isFunction from 'lodash-es/isFunction.js'
import expBuild from './expBuild.mjs'
import expTest from './expTest.mjs'
import getFiles from './getFiles.mjs'
import readJson from './readJson.mjs'
/**
* 批次建置測試範例之正確版快照(screenshot)
*
* @memberOf w-puppeteer-uitest
* @param {String} fd_html 輸入html檔案所在資料夾字串
* @param {String|Function} fd_action 輸入html檔案所需測試動作json檔案所在資料夾字串,為函數時將於產生items時呼叫,針對各item需回傳操作actions物件陣列
* @param {String} fd_out 輸入快照資料儲存之資料夾字串
* @param {Object} [optExp={}] 輸入設定物件,預設為{}
* @param {Function} [optExp.htmlFilter=null] 輸入讀取html檔案過濾函數,可再用以過濾讀取fd_html內html檔案,預設為null
* @param {Boolean} [optExp.headless=true] 輸入是否以無頭方式開啟網頁,預設為true
* @param {Object} [optExp.viewport={ width: 800, height: 600 }] 輸入網頁開啟後之viewport,預設為{ width: 800, height: 600 }
* @param {Number} [optExp.num_web=10] 輸入平行啟動瀏覽器之數量,預設為10
* @returns {Promise} 回傳Promise,resolve為建置成功,reject為建置失敗item名稱
*/
async function build(fd_html, fd_action, fd_out, optExp) {
//check
if (!fs.existsSync(fd_html)) {
console.log('build: folder not exits: ', fd_html)
return
}
if (!isFunction(fd_action)) {
if (!fs.existsSync(fd_action)) {
console.log('build: folder not exits: ', fd_action)
return
}
}
//fd_out mkdirSync
if (!fs.existsSync(fd_out)) {
fs.mkdirSync(fd_out)
}
//ltfns
let ltfns = await getFiles(fd_html, '.html')
//htmlFilter
if (isFunction(optExp.htmlFilter)) {
ltfns = optExp.htmlFilter(ltfns)
}
//items
let items = map(ltfns, function(v) {
let name = v.replace('.html', '')
let item = {
name,
actions: [],
url: fd_html + v,
fn_png: fd_out + name + '.png',
fn_base64: fd_out + name + '.base64',
}
if (isFunction(fd_action)) {
item.actions = fd_action(name)
}
else {
item.actions = readJson(fd_action + name + '.action.json')
}
return item
})
//expBuild
await expBuild(items, optExp)
}
/**
* 批次測試範例之快照(screenshot)是否與正確版相同
*
* @memberOf w-puppeteer-uitest
* @param {String} fd_html 輸入html檔案所在資料夾字串
* @param {String|Function} fd_action 輸入html檔案所需測試動作json檔案所在資料夾字串,為函數時將於產生items時呼叫,針對各item需回傳操作actions物件陣列
* @param {String} fd_base64 輸入快照資料儲存之資料夾字串
* @param {Object} [optExp={}] 輸入設定物件,預設為{}
* @param {Function} [optExp.htmlFilter=null] 輸入讀取html檔案過濾函數,可再用以過濾讀取fd_html內html檔案,預設為null
* @param {Boolean} [optExp.headless=true] 輸入是否以無頭方式開啟網頁,預設為true
* @param {Object} [optExp.viewport={ width: 800, height: 600 }] 輸入網頁開啟後之viewport,預設為{ width: 800, height: 600 }
* @param {Number} [optExp.num_web=10] 輸入平行啟動瀏覽器之數量,預設為10
* @param {Number} [optExp.ratio_similar=1] 輸入偵測圖片相近度,預設為1,也就是完全相似
* @returns {Promise} 回傳Promise,resolve為建置成功,reject為建置失敗item名稱
*/
async function test(fd_html, fd_action, fd_base64, optExp) {
//check
if (!fs.existsSync(fd_html)) {
console.log('test: folder not exits: ', fd_html)
return
}
if (!isFunction(fd_action)) {
if (!fs.existsSync(fd_action)) {
console.log('build: folder not exits: ', fd_action)
return
}
}
if (!fs.existsSync(fd_base64)) {
console.log('test: folder not exits: ', fd_base64)
return
}
//ltfns
let ltfns = await getFiles(fd_html, '.html')
//htmlFilter
if (isFunction(optExp.htmlFilter)) {
ltfns = optExp.htmlFilter(ltfns)
}
//items
let items = map(ltfns, function(v) {
let name = v.replace('.html', '')
let item = {
name,
actions: [],
url: fd_html + v,
//fn_png: fd_base64 + name + '.png',
fn_base64: fd_base64 + name + '.base64',
}
if (isFunction(fd_action)) {
item.actions = fd_action(name)
}
else {
item.actions = readJson(fd_action + name + '.action.json')
}
return item
})
//expTest
await expTest(items, optExp)
}
export { build, test }
</code></pre>
</article>
</section>
</div>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Sat Mar 23 2024 23:37:02 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
</footer>
<script>prettyPrint();</script>
<script src="scripts/polyfill.js"></script>
<script src="scripts/linenumber.js"></script>
</body>
</html>