siesta-lite
Version:
Stress-free JavaScript unit testing and functional testing tool, works in NodeJS and browsers
105 lines (76 loc) • 3.24 kB
JavaScript
/*
Siesta 5.6.1
Copyright(c) 2009-2022 Bryntum AB
https://bryntum.com/contact
https://bryntum.com/products/siesta/license
*/
Class('Siesta.Launcher.Runner.Puppeteer', {
isa : Siesta.Launcher.Runner.BaseRunner,
has : {
pagePollInteval : 1000,
maxWorkers : 5,
pagesPerChunk : 3
},
methods : {
// promised method, should never reject, but instead resolve to the instance of Error
setup : function () {
return Promise.resolve(this)
},
createBrowser : function () {
var me = this
this.debug("Runner setup: " + this)
return new Promise(function (resolve, reject) {
var options = me.dispatcher.options
// prepare browser args
var browserArgs = options[ 'browser-arg' ] || []
if (!(browserArgs instanceof Array)) browserArgs = [ browserArgs ]
var args = [
'--disk-cache-size=0',
'--media-cache-size=0',
'--window-size=1280,1024'
]
if (options.coverage) {
args.push('--proxy-server=127.0.0.1:' + me.dispatcher.instrumentationProxyPort)
}
Joose.A.each(browserArgs, function (arg) {
// prepend -- if missing
args.push(arg.replace(/^(--)?/, '--'))
})
require('puppeteer').launch({
args : args,
headless : options.headless !== 'false',
ignoreHTTPSErrors : true,
devtools : options.headless === 'false',
// slowMo : 250,
timeout : 60000
}).then(function (puppeteerBrowser) {
resolve(puppeteerBrowser)
}, function (e) {
resolve(e)
})
})
},
createPage : function (callback) {
var me = this
this.createBrowser().then(function (browser) {
if ((browser instanceof Error) || !browser.newPage) { callback(browser); return }
browser.newPage().then(function (puppeteerPage) {
var config = {
runner : me,
launcher : me.launcher,
dispatcher : me.dispatcher,
puppeteerPage : puppeteerPage,
puppeteerBrowser : browser,
pollInterval : me.pagePollInteval
}
var options = me.dispatcher.options
if (options.width) config.width = options.width
if (options.height) config.height = options.height
callback(null, new Siesta.Launcher.Page.Puppeteer(config))
}, function (e) {
callback(e)
})
})
}
}
})