Skip to content

Commit 4c90c15

Browse files
author
DavertMik
committed
fixed session tests
1 parent 326f9d7 commit 4c90c15

File tree

5 files changed

+19
-40
lines changed

5 files changed

+19
-40
lines changed

lib/helper/Playwright.js

Lines changed: 5 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2680,33 +2680,16 @@ class Playwright extends Helper {
26802680

26812681
this.debugSection('Screenshot', relativeDir(outputFile))
26822682

2683-
// Multiple layers of checking before attempting screenshot
2684-
if (!this.page) {
2685-
this.debug('Cannot take screenshot: page object is undefined')
2683+
if (!this.page || !this.browser || !this.browserContext) {
2684+
this.debug(`Cannot take screenshot: page=${!!this.page}, browser=${!!this.browser}, browserContext=${!!this.browserContext}`)
26862685
return
26872686
}
2688-
2689-
if (!this.browser) {
2690-
this.debug('Cannot take screenshot: browser object is undefined')
2691-
return
2692-
}
2693-
2694-
if (!this.browserContext) {
2695-
this.debug('Cannot take screenshot: browser context is undefined')
2687+
if (this.page.isClosed && this.page.isClosed()) {
2688+
this.debug('Cannot take screenshot: page is closed')
26962689
return
26972690
}
26982691

26992692
try {
2700-
// Check if page is still accessible before taking screenshot
2701-
if (this.page.isClosed && this.page.isClosed()) {
2702-
this.debug('Cannot take screenshot: page is closed')
2703-
return
2704-
}
2705-
2706-
// Additional check - try to access page properties to ensure it's alive
2707-
await Promise.race([this.page.url(), new Promise((_, reject) => setTimeout(() => reject(new Error('Page URL check timeout')), 1000))])
2708-
2709-
// Take screenshot with timeout protection
27102693
await Promise.race([
27112694
this.page.screenshot({
27122695
path: outputFile,
@@ -2718,18 +2701,10 @@ class Playwright extends Helper {
27182701
} catch (err) {
27192702
this.debug(`Failed to take screenshot: ${err.message}`)
27202703

2721-
// Track screenshot failures that could affect test results
27222704
this.hasCleanupError = true
27232705
this.testFailures.push(`Screenshot failed: ${err.message}`)
27242706

2725-
if (
2726-
err.message.includes('Target page, context or browser has been closed') ||
2727-
err.message.includes('Page has been closed') ||
2728-
err.message.includes('Browser has been closed') ||
2729-
err.message.includes('Protocol error') ||
2730-
err.message.includes('Connection closed') ||
2731-
err.message.includes('timeout')
2732-
) {
2707+
if (err.message.includes('closed') || err.message.includes('Protocol error') || err.message.includes('timeout')) {
27332708
this.debug('Screenshot failed due to browser/page closure or timeout, continuing...')
27342709
return
27352710
}

lib/session.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ function session(sessionName, config, fn) {
5151
delete savedSessions[sessionName]
5252
}
5353

54-
event.dispatcher.once(event.test.finished, () => {
54+
event.dispatcher.once(event.test.after, () => {
5555
recorder.add('close session browsers', closeBrowsers)
5656
})
5757

@@ -83,6 +83,7 @@ function session(sessionName, config, fn) {
8383
recorder.session.start(`session:${sessionName}`)
8484
event.dispatcher.on(event.step.after, addContextToStep)
8585
recorder.add('switch to browser', () => {
86+
const session = savedSessions[sessionName]
8687
return session.loadVars(session.vars)
8788
})
8889

@@ -99,9 +100,10 @@ function session(sessionName, config, fn) {
99100
if (isAsyncFunction(fn)) {
100101
return fn
101102
.apply(null)
102-
.then(res => {
103+
.then(async res => {
103104
finalize()
104-
return recorder.promise().then(() => res)
105+
await recorder.promise()
106+
return res
105107
})
106108
.catch(e => {
107109
output.stepShift = 0

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@
133133
"@inquirer/testing": "^2.1.49",
134134
"@pollyjs/adapter-puppeteer": "6.0.6",
135135
"@pollyjs/core": "6.0.6",
136-
"@testomatio/reporter": "^2.0.2",
136+
"@testomatio/reporter": "^2.3.0",
137137
"@types/chai": "5.2.2",
138138
"@types/inquirer": "9.0.7",
139139
"@types/node": "24.0.10",

test/acceptance/session_test.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,16 @@ Scenario('screenshots reflect the current page of current session @Puppeteer @Pl
2222
I.amOnPage('/')
2323
I.saveScreenshot('session_default_1.png')
2424

25-
session('john', () => {
25+
await session('john', () => {
2626
I.amOnPage('/info')
2727
I.saveScreenshot('session_john_1.png')
28+
I.say('John is first')
2829
})
2930

31+
I.say('Me is second')
3032
I.saveScreenshot('session_default_2.png')
3133

32-
session('john', () => {
34+
await session('john', () => {
3335
I.saveScreenshot('session_john_2.png')
3436
})
3537

test/support/TestHelper.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
class TestHelper {
22
static siteUrl() {
3-
return process.env.SITE_URL || 'http://localhost:8000'
3+
return process.env.SITE_URL || 'http://0.0.0.0:8000'
44
}
55

66
static angularSiteUrl() {
@@ -12,23 +12,23 @@ class TestHelper {
1212
}
1313

1414
static seleniumHost() {
15-
return process.env.SELENIUM_HOST || 'localhost'
15+
return process.env.SELENIUM_HOST || '0.0.0.0'
1616
}
1717

1818
static seleniumPort() {
1919
return parseInt(process.env.SELENIUM_PORT || '4444', 10)
2020
}
2121

2222
static jsonServerUrl() {
23-
return process.env.JSON_SERVER_URL || 'http://localhost:8010'
23+
return process.env.JSON_SERVER_URL || 'http://0.0.0.0:8010'
2424
}
2525

2626
static graphQLServerPort() {
2727
return parseInt(process.env.GRAPHQL_SERVER_PORT || '8020', 10)
2828
}
2929

3030
static graphQLServerUrl() {
31-
return process.env.GRAPHQL_SERVER_URL || 'http://localhost:8020/graphql'
31+
return process.env.GRAPHQL_SERVER_URL || 'http://0.0.0.0:8020/graphql'
3232
}
3333

3434
static echo(...args) {

0 commit comments

Comments
 (0)