Skip to content

Commit fe8a8da

Browse files
committed
fix more tests
1 parent 08fa092 commit fe8a8da

File tree

2 files changed

+34
-10
lines changed

2 files changed

+34
-10
lines changed

lib/container.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ class Container {
6262

6363
// create support objects
6464
container.support = {}
65-
container.helpers = createHelpers(config.helpers || {})
65+
container.helpers = await createHelpers(config.helpers || {})
6666
container.translation = await loadTranslation(config.translation || null, config.vocabularies || [])
6767
container.proxySupport = createSupportObjects(config.include || {})
6868
container.plugins = await createPlugins(config.plugins || {}, opts)
@@ -252,7 +252,7 @@ class Container {
252252

253253
export default Container
254254

255-
function createHelpers(config) {
255+
async function createHelpers(config) {
256256
const helpers = {}
257257
for (let helperName in config) {
258258
try {
@@ -278,7 +278,7 @@ function createHelpers(config) {
278278
helpers[helperName] = {}
279279
asyncHelperPromise = asyncHelperPromise
280280
.then(() => helperResult)
281-
.then(ResolvedHelperClass => {
281+
.then(async ResolvedHelperClass => {
282282
debug(`helper ${helperName} resolved type: ${typeof ResolvedHelperClass}`, ResolvedHelperClass)
283283

284284
// Extract default export from ESM module wrapper if needed
@@ -293,7 +293,7 @@ function createHelpers(config) {
293293

294294
checkHelperRequirements(ResolvedHelperClass)
295295
helpers[helperName] = new ResolvedHelperClass(config[helperName])
296-
if (helpers[helperName]._init) helpers[helperName]._init()
296+
if (helpers[helperName]._init) await helpers[helperName]._init()
297297
debug(`helper ${helperName} async initialized`)
298298
})
299299
continue
@@ -332,7 +332,7 @@ function createHelpers(config) {
332332
}
333333

334334
for (const name in helpers) {
335-
if (helpers[name]._init) helpers[name]._init()
335+
if (helpers[name]._init) await helpers[name]._init()
336336
}
337337
return helpers
338338
}

lib/helper/Puppeteer.js

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -303,16 +303,20 @@ class Puppeteer extends Helper {
303303
// Load puppeteer dynamically with fallback
304304
if (!puppeteer) {
305305
try {
306-
puppeteer = await import('puppeteer')
307-
puppeteer = puppeteer.default || puppeteer
306+
const puppeteerModule = await import('puppeteer')
307+
puppeteer = puppeteerModule.default || puppeteerModule
308+
this.debugSection('Puppeteer', `Loaded puppeteer successfully, launch available: ${!!puppeteer.launch}`)
308309
} catch (e) {
309310
try {
310-
puppeteer = await import('puppeteer-core')
311-
puppeteer = puppeteer.default || puppeteer
311+
const puppeteerModule = await import('puppeteer-core')
312+
puppeteer = puppeteerModule.default || puppeteerModule
313+
this.debugSection('Puppeteer', `Loaded puppeteer-core successfully, launch available: ${!!puppeteer.launch}`)
312314
} catch (e2) {
313315
throw new Error('Neither puppeteer nor puppeteer-core could be loaded. Please install one of them.')
314316
}
315317
}
318+
} else {
319+
this.debugSection('Puppeteer', `Puppeteer already loaded, launch available: ${!!puppeteer.launch}`)
316320
}
317321
}
318322

@@ -577,6 +581,12 @@ class Puppeteer extends Helper {
577581
}
578582

579583
async _startBrowser() {
584+
this.debugSection('Puppeteer', `Starting browser. Puppeteer available: ${!!puppeteer}, launch available: ${!!puppeteer?.launch}`)
585+
586+
if (!puppeteer) {
587+
throw new Error('Puppeteer is not loaded. Make sure _init() was called before _startBrowser()')
588+
}
589+
580590
if (this.isRemoteBrowser) {
581591
try {
582592
this.browser = await puppeteer.connect(this.puppeteerOptions)
@@ -694,7 +704,21 @@ class Puppeteer extends Helper {
694704
this.currentRunningTest.artifacts.trace = fileName
695705
}
696706

697-
await this.page.goto(url, { waitUntil: this.options.waitForNavigation })
707+
try {
708+
await this.page.goto(url, { waitUntil: this.options.waitForNavigation })
709+
} catch (err) {
710+
// Handle terminal navigation errors that shouldn't be retried
711+
if (
712+
err.message &&
713+
(err.message.includes('ERR_ABORTED') || err.message.includes('frame was detached') || err.message.includes('Target page, context or browser has been closed') || err.message.includes('Navigation timeout'))
714+
) {
715+
// Mark this as a terminal error to prevent retries
716+
const terminalError = new Error(err.message)
717+
terminalError.isTerminal = true
718+
throw terminalError
719+
}
720+
throw err
721+
}
698722

699723
const performanceTiming = JSON.parse(await this.page.evaluate(() => JSON.stringify(window.performance.timing)))
700724

0 commit comments

Comments
 (0)