UNPKG

w-puppeteer-uitest

Version:
215 lines (164 loc) 7.38 kB
<!DOCTYPE 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>