Skip to content

Commit 1b1771e

Browse files
authored
Merge pull request #257 from Progi1984/captureErrors
`utilsPlaywright` : Improve system for capturing errors
2 parents 243dcb1 + 084b4b8 commit 1b1771e

File tree

2 files changed

+116
-37
lines changed

2 files changed

+116
-37
lines changed

src/data/types/globals.ts

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,17 +39,33 @@ type GlobalBrowser = {
3939
sandboxArgs: Array<string>
4040
acceptDownloads: boolean
4141
config: GlobalBrowserConfig
42-
interceptErrors: any
42+
captureErrors: boolean
4343
}
4444

4545
type GlobalPSConfig = {
4646
parametersFile: string
4747
}
4848

49+
type GlobalBrowserErrorConsole = {
50+
url: string
51+
error: string
52+
}
53+
54+
type GlobalBrowserErrorJs = {
55+
url: string
56+
error: string
57+
}
58+
59+
type GlobalBrowserErrorResponse = {
60+
url: string
61+
requestUrl: string
62+
status: string
63+
}
64+
4965
type GlobalBrowserErrors = {
50-
responses: Array<any>
51-
js: Array<any>
52-
console: Array<any>
66+
responses: Array<GlobalBrowserErrorResponse>
67+
js: Array<GlobalBrowserErrorJs>
68+
console: Array<GlobalBrowserErrorConsole>
5369
}
5470

5571
type GlobalScreenshot = {
@@ -78,6 +94,9 @@ export type {
7894
GlobalBrowser,
7995
GlobalBrowserConfig,
8096
GlobalPSConfig,
97+
GlobalBrowserErrorConsole,
98+
GlobalBrowserErrorJs,
99+
GlobalBrowserErrorResponse,
81100
GlobalBrowserErrors,
82101
GlobalScreenshot,
83102
GlobalMaildevConfig,

src/utils/playwright.ts

Lines changed: 93 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import {GlobalBrowserErrorConsole, GlobalBrowserErrorJs, GlobalBrowserErrorResponse} from '@data/types/globals';
12
import {
23
APIRequestContext,
34
BrowserContext,
@@ -20,7 +21,7 @@ export default {
2021
* @param attempt {number} Number of attempts to restart browser creation if function throw error
2122
* @return {Promise<Browser>}
2223
*/
23-
async createBrowser(attempt = 1): Promise<Browser> {
24+
async createBrowser(attempt: number = 1): Promise<Browser> {
2425
const browsers: Record<string, BrowserType> = {
2526
chromium,
2627
webkit,
@@ -95,8 +96,8 @@ export default {
9596
async newTab(context: BrowserContext): Promise<Page> {
9697
const page = await context.newPage();
9798

98-
if (global.BROWSER.interceptErrors) {
99-
await this.interceptAllErrors(page);
99+
if (global.BROWSER.captureErrors) {
100+
await this.captureAllErrors(page);
100101
}
101102
return page;
102103
},
@@ -119,11 +120,63 @@ export default {
119120
await browser.close();
120121
},
121122

123+
/**
124+
* Get last opened tab (The current active tab)
125+
* @param browser {Browser} Browser given
126+
* @returns {Promise<Page>}
127+
*/
128+
async getLastOpenedTab(browser: Browser): Promise<Page | null> {
129+
// Get contexts
130+
const contexts = browser.contexts();
131+
132+
// Return null if no context found
133+
if (contexts.length === 0) {
134+
return null;
135+
}
136+
137+
// Get pages from last created context
138+
const tabs = contexts[contexts.length - 1].pages();
139+
140+
// Return null if no tabs found
141+
if (tabs.length === 0) {
142+
return null;
143+
}
144+
145+
return tabs[tabs.length - 1];
146+
},
147+
148+
/**
149+
* Returns the number of tabs
150+
* @param browserContext {BrowserContext} Browser given
151+
* @returns {number}
152+
*/
153+
getNumberTabs(browserContext: BrowserContext): number {
154+
// Get pages from last created context
155+
return browserContext.pages().length;
156+
},
157+
158+
/**
159+
* Returns if errors are captured
160+
* @returns boolean
161+
*/
162+
isErrorsCaptured(): boolean {
163+
return global.BROWSER.captureErrors;
164+
},
165+
166+
/**
167+
* Define if errors are captured
168+
* @param captureErrors {boolean}
169+
* @returns void
170+
*/
171+
setErrorsCaptured(captureErrors: boolean): void {
172+
global.BROWSER.captureErrors = captureErrors;
173+
},
174+
122175
/**
123176
* Intercept response errors
124177
* @param page {Page} Browser tab given
125178
*/
126-
interceptResponseErrors(page: Page): void {
179+
captureResponseErrors(page: Page): void {
127180
page.on('response', (response) => {
128181
const status = response.status().toString();
129182
const url = page.url();
@@ -139,7 +192,7 @@ export default {
139192
* Intercept js errors
140193
* @param page {Page} Browser tab given
141194
*/
142-
interceptJsErrors(page: Page): void {
195+
captureJsErrors(page: Page): void {
143196
page.on('pageerror', (e) => {
144197
global.browserErrors.js.push(
145198
{
@@ -154,7 +207,7 @@ export default {
154207
* Intercept console errors
155208
* @param page {Page} Browser tab given
156209
*/
157-
interceptConsoleErrors(page: Page): void {
210+
captureConsoleErrors(page: Page): void {
158211
page.on('console', (msg) => {
159212
if (msg.type() === 'error') {
160213
global.browserErrors.console.push({
@@ -169,44 +222,51 @@ export default {
169222
* Intercept all errors (response, js, console)
170223
* @param page {Page} Browser tab given
171224
*/
172-
interceptAllErrors(page: Page): void {
173-
this.interceptResponseErrors(page);
174-
this.interceptJsErrors(page);
175-
this.interceptConsoleErrors(page);
225+
captureAllErrors(page: Page): void {
226+
this.captureResponseErrors(page);
227+
this.captureJsErrors(page);
228+
this.captureConsoleErrors(page);
176229
},
177230

178231
/**
179-
* Get last opened tab (The current active tab)
180-
* @param browser {Browser} Browser given
181-
* @returns {Promise<Page>}
232+
* Returns Console captured errors
182233
*/
183-
async getLastOpenedTab(browser: Browser): Promise<Page | null> {
184-
// Get contexts
185-
const contexts = browser.contexts();
234+
getConsoleErrors(): Array<GlobalBrowserErrorConsole> {
235+
return global.browserErrors.console;
236+
},
186237

187-
// Return null if no context found
188-
if (contexts.length === 0) {
189-
return null;
190-
}
238+
/**
239+
* Returns JS captured errors
240+
*/
241+
getJsErrors(): Array<GlobalBrowserErrorJs> {
242+
return global.browserErrors.js;
243+
},
191244

192-
// Get pages from last created context
193-
const tabs = contexts[contexts.length - 1].pages();
245+
/**
246+
* Returns Response captured errors
247+
*/
248+
getResponseErrors(): Array<GlobalBrowserErrorResponse> {
249+
return global.browserErrors.responses;
250+
},
194251

195-
// Return null if no tabs found
196-
if (tabs.length === 0) {
197-
return null;
198-
}
252+
/**
253+
* Reset Console captured errors
254+
*/
255+
resetConsoleErrors(): void {
256+
global.browserErrors.console = [];
257+
},
199258

200-
return tabs[tabs.length - 1];
259+
/**
260+
* Reset JS captured errors
261+
*/
262+
resetJsErrors(): void {
263+
global.browserErrors.js = [];
201264
},
202265

203266
/**
204-
* Returns the number of tabs
205-
* @param browserContext {BrowserContext} Browser given
206-
* @returns {number}
267+
* Reset Response captured errors
207268
*/
208-
getNumberTabs(browserContext: BrowserContext): number {
209-
// Get pages from last created context
210-
return browserContext.pages().length;
269+
resetResponseErrors(): void {
270+
global.browserErrors.responses = [];
211271
},
212272
};

0 commit comments

Comments
 (0)