playwright-automation-core 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +225 -0
  3. package/dist/api/api.assertions.d.ts +196 -0
  4. package/dist/api/api.assertions.d.ts.map +1 -0
  5. package/dist/api/api.assertions.js +462 -0
  6. package/dist/api/api.assertions.js.map +1 -0
  7. package/dist/api/api.builder.d.ts +134 -0
  8. package/dist/api/api.builder.d.ts.map +1 -0
  9. package/dist/api/api.builder.js +273 -0
  10. package/dist/api/api.builder.js.map +1 -0
  11. package/dist/api/api.client.d.ts +157 -0
  12. package/dist/api/api.client.d.ts.map +1 -0
  13. package/dist/api/api.client.js +493 -0
  14. package/dist/api/api.client.js.map +1 -0
  15. package/dist/api/index.d.ts +8 -0
  16. package/dist/api/index.d.ts.map +1 -0
  17. package/dist/api/index.js +17 -0
  18. package/dist/api/index.js.map +1 -0
  19. package/dist/core/base.driver.d.ts +130 -0
  20. package/dist/core/base.driver.d.ts.map +1 -0
  21. package/dist/core/base.driver.js +264 -0
  22. package/dist/core/base.driver.js.map +1 -0
  23. package/dist/core/driver.factory.d.ts +120 -0
  24. package/dist/core/driver.factory.d.ts.map +1 -0
  25. package/dist/core/driver.factory.js +222 -0
  26. package/dist/core/driver.factory.js.map +1 -0
  27. package/dist/core/element.actions.d.ts +119 -0
  28. package/dist/core/element.actions.d.ts.map +1 -0
  29. package/dist/core/element.actions.js +379 -0
  30. package/dist/core/element.actions.js.map +1 -0
  31. package/dist/core/hook.manager.d.ts +186 -0
  32. package/dist/core/hook.manager.d.ts.map +1 -0
  33. package/dist/core/hook.manager.js +297 -0
  34. package/dist/core/hook.manager.js.map +1 -0
  35. package/dist/core/index.d.ts +8 -0
  36. package/dist/core/index.d.ts.map +1 -0
  37. package/dist/core/index.js +22 -0
  38. package/dist/core/index.js.map +1 -0
  39. package/dist/index.d.ts +17 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +128 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/mobile/index.d.ts +7 -0
  44. package/dist/mobile/index.d.ts.map +1 -0
  45. package/dist/mobile/index.js +14 -0
  46. package/dist/mobile/index.js.map +1 -0
  47. package/dist/mobile/mobile.assertions.d.ts +146 -0
  48. package/dist/mobile/mobile.assertions.d.ts.map +1 -0
  49. package/dist/mobile/mobile.assertions.js +333 -0
  50. package/dist/mobile/mobile.assertions.js.map +1 -0
  51. package/dist/mobile/mobile.driver.d.ts +297 -0
  52. package/dist/mobile/mobile.driver.d.ts.map +1 -0
  53. package/dist/mobile/mobile.driver.js +808 -0
  54. package/dist/mobile/mobile.driver.js.map +1 -0
  55. package/dist/types/common.types.d.ts +200 -0
  56. package/dist/types/common.types.d.ts.map +1 -0
  57. package/dist/types/common.types.js +3 -0
  58. package/dist/types/common.types.js.map +1 -0
  59. package/dist/types/config.types.d.ts +192 -0
  60. package/dist/types/config.types.d.ts.map +1 -0
  61. package/dist/types/config.types.js +3 -0
  62. package/dist/types/config.types.js.map +1 -0
  63. package/dist/types/driver.types.d.ts +500 -0
  64. package/dist/types/driver.types.d.ts.map +1 -0
  65. package/dist/types/driver.types.js +3 -0
  66. package/dist/types/driver.types.js.map +1 -0
  67. package/dist/types/enums.d.ts +53 -0
  68. package/dist/types/enums.d.ts.map +1 -0
  69. package/dist/types/enums.js +62 -0
  70. package/dist/types/enums.js.map +1 -0
  71. package/dist/types/index.d.ts +8 -0
  72. package/dist/types/index.d.ts.map +1 -0
  73. package/dist/types/index.js +15 -0
  74. package/dist/types/index.js.map +1 -0
  75. package/dist/utils/config.manager.d.ts +144 -0
  76. package/dist/utils/config.manager.d.ts.map +1 -0
  77. package/dist/utils/config.manager.js +473 -0
  78. package/dist/utils/config.manager.js.map +1 -0
  79. package/dist/utils/errors.d.ts +149 -0
  80. package/dist/utils/errors.d.ts.map +1 -0
  81. package/dist/utils/errors.js +290 -0
  82. package/dist/utils/errors.js.map +1 -0
  83. package/dist/utils/helpers.d.ts +124 -0
  84. package/dist/utils/helpers.d.ts.map +1 -0
  85. package/dist/utils/helpers.js +421 -0
  86. package/dist/utils/helpers.js.map +1 -0
  87. package/dist/utils/index.d.ts +9 -0
  88. package/dist/utils/index.d.ts.map +1 -0
  89. package/dist/utils/index.js +78 -0
  90. package/dist/utils/index.js.map +1 -0
  91. package/dist/utils/logger.d.ts +145 -0
  92. package/dist/utils/logger.d.ts.map +1 -0
  93. package/dist/utils/logger.js +235 -0
  94. package/dist/utils/logger.js.map +1 -0
  95. package/dist/utils/wait.utils.d.ts +95 -0
  96. package/dist/utils/wait.utils.d.ts.map +1 -0
  97. package/dist/utils/wait.utils.js +306 -0
  98. package/dist/utils/wait.utils.js.map +1 -0
  99. package/dist/web/index.d.ts +8 -0
  100. package/dist/web/index.d.ts.map +1 -0
  101. package/dist/web/index.js +16 -0
  102. package/dist/web/index.js.map +1 -0
  103. package/dist/web/web.assertions.d.ts +164 -0
  104. package/dist/web/web.assertions.d.ts.map +1 -0
  105. package/dist/web/web.assertions.js +427 -0
  106. package/dist/web/web.assertions.js.map +1 -0
  107. package/dist/web/web.driver.d.ts +174 -0
  108. package/dist/web/web.driver.d.ts.map +1 -0
  109. package/dist/web/web.driver.js +571 -0
  110. package/dist/web/web.driver.js.map +1 -0
  111. package/dist/web/web.page.d.ts +286 -0
  112. package/dist/web/web.page.d.ts.map +1 -0
  113. package/dist/web/web.page.js +570 -0
  114. package/dist/web/web.page.js.map +1 -0
  115. package/package.json +115 -0
@@ -0,0 +1,571 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.WebDriver = void 0;
37
+ const test_1 = require("@playwright/test");
38
+ const types_1 = require("../types");
39
+ const base_driver_1 = require("../core/base.driver");
40
+ const hook_manager_1 = require("../core/hook.manager");
41
+ const utils_1 = require("../utils");
42
+ const path = __importStar(require("path"));
43
+ /**
44
+ * Web Driver implementation using Playwright.
45
+ * Supports Chromium, Firefox, and WebKit browsers.
46
+ */
47
+ class WebDriver extends base_driver_1.BaseDriver {
48
+ /** Playwright browser instance */
49
+ browser = null;
50
+ /** Browser context */
51
+ context = null;
52
+ /** Current active page */
53
+ page = null;
54
+ /** All pages in the context */
55
+ pages = [];
56
+ /** Web-specific configuration */
57
+ config;
58
+ /** Hook manager */
59
+ hooks;
60
+ /**
61
+ * Create a new WebDriver instance
62
+ */
63
+ constructor(config, logger) {
64
+ super(types_1.Platform.WEB, config, logger);
65
+ this.config = config;
66
+ this.hooks = (0, hook_manager_1.getHookManager)();
67
+ }
68
+ /**
69
+ * Initialize the browser and create a new page
70
+ */
71
+ async initialize() {
72
+ if (this.initialized) {
73
+ this.logger.warn("WebDriver already initialized");
74
+ return;
75
+ }
76
+ // Execute before init hooks
77
+ await this.hooks.execute(hook_manager_1.HookEvent.BEFORE_DRIVER_INIT, {
78
+ platform: this.platform,
79
+ data: { config: this.getSafeConfig() },
80
+ });
81
+ try {
82
+ this.logger.info("Initializing WebDriver", {
83
+ browser: this.config.browser,
84
+ headless: this.config.headless,
85
+ });
86
+ // Get browser type
87
+ const browserType = this.getBrowserType();
88
+ // Launch browser
89
+ this.browser = await browserType.launch({
90
+ headless: this.config.headless ?? true,
91
+ slowMo: this.config.slowMo,
92
+ args: this.config.launchArgs,
93
+ });
94
+ // Create browser context
95
+ this.context = await this.createContext();
96
+ // Create initial page
97
+ this.page = await this.context.newPage();
98
+ this.pages = [this.page];
99
+ // Set up page event listeners
100
+ this.setupPageListeners(this.page);
101
+ // Generate session ID and mark initialized
102
+ this.generateSessionId();
103
+ this.markInitialized();
104
+ // Execute after init hooks
105
+ await this.hooks.execute(hook_manager_1.HookEvent.AFTER_DRIVER_INIT, {
106
+ platform: this.platform,
107
+ driverStatus: this.getStatus(),
108
+ data: { browser: this.config.browser },
109
+ });
110
+ }
111
+ catch (error) {
112
+ const err = error;
113
+ this.logger.error("Failed to initialize WebDriver", {
114
+ error: err.message,
115
+ });
116
+ throw new utils_1.DriverInitializationError(this.platform, `Failed to initialize browser: ${err.message}`, { browser: this.config.browser });
117
+ }
118
+ }
119
+ /**
120
+ * Get Playwright browser type based on configuration
121
+ */
122
+ getBrowserType() {
123
+ switch (this.config.browser) {
124
+ case types_1.BrowserType.FIREFOX:
125
+ return test_1.firefox;
126
+ case types_1.BrowserType.WEBKIT:
127
+ return test_1.webkit;
128
+ case types_1.BrowserType.CHROMIUM:
129
+ default:
130
+ return test_1.chromium;
131
+ }
132
+ }
133
+ /**
134
+ * Create browser context with configuration options
135
+ */
136
+ async createContext() {
137
+ if (!this.browser) {
138
+ throw new Error("Browser not initialized");
139
+ }
140
+ const contextOptions = {
141
+ ignoreHTTPSErrors: this.config.ignoreHTTPSErrors,
142
+ viewport: this.config.viewport,
143
+ locale: this.config.locale,
144
+ timezoneId: this.config.timezoneId,
145
+ geolocation: this.config.geolocation,
146
+ permissions: this.config.permissions,
147
+ colorScheme: this.config.colorScheme,
148
+ baseURL: this.config.baseURL,
149
+ extraHTTPHeaders: this.config.extraHTTPHeaders,
150
+ };
151
+ // Apply device emulation if specified
152
+ if (this.config.deviceEmulation && test_1.devices[this.config.deviceEmulation]) {
153
+ Object.assign(contextOptions, test_1.devices[this.config.deviceEmulation]);
154
+ }
155
+ // Load storage state if provided
156
+ if (this.config.storageState) {
157
+ contextOptions.storageState = this.config.storageState;
158
+ }
159
+ // Set up proxy if configured
160
+ if (this.config.proxy) {
161
+ contextOptions.proxy = {
162
+ server: this.config.proxy.server,
163
+ username: this.config.proxy.username,
164
+ password: this.config.proxy.password,
165
+ };
166
+ }
167
+ // Set up video recording if enabled
168
+ if (this.config.recordVideo) {
169
+ const videoDir = this.config.videoDir || "./videos";
170
+ (0, utils_1.ensureDir)(videoDir);
171
+ contextOptions.recordVideo = {
172
+ dir: videoDir,
173
+ size: this.config.viewport,
174
+ };
175
+ }
176
+ return await this.browser.newContext(contextOptions);
177
+ }
178
+ /**
179
+ * Set up event listeners on a page
180
+ */
181
+ setupPageListeners(page) {
182
+ // Log console messages
183
+ page.on("console", (msg) => {
184
+ this.logger.trace(`Browser console [${msg.type()}]: ${msg.text()}`);
185
+ });
186
+ // Log page errors
187
+ page.on("pageerror", (error) => {
188
+ this.logger.error(`Page error: ${error.message}`);
189
+ });
190
+ // Log request failures
191
+ page.on("requestfailed", (request) => {
192
+ this.logger.warn(`Request failed: ${request.url()} - ${request.failure()?.errorText}`);
193
+ });
194
+ // Track page close
195
+ page.on("close", () => {
196
+ this.pages = this.pages.filter((p) => p !== page);
197
+ if (page === this.page && this.pages.length > 0) {
198
+ this.page = this.pages[this.pages.length - 1];
199
+ }
200
+ });
201
+ }
202
+ /**
203
+ * Get the underlying Playwright Page object
204
+ */
205
+ getDriver() {
206
+ this.ensureInitialized("getDriver");
207
+ return this.page;
208
+ }
209
+ /**
210
+ * Get the current page
211
+ */
212
+ getPage() {
213
+ this.ensureInitialized("getPage");
214
+ return this.page;
215
+ }
216
+ /**
217
+ * Get the browser instance
218
+ */
219
+ getBrowser() {
220
+ this.ensureInitialized("getBrowser");
221
+ return this.browser;
222
+ }
223
+ /**
224
+ * Get the browser context
225
+ */
226
+ getContext() {
227
+ this.ensureInitialized("getContext");
228
+ return this.context;
229
+ }
230
+ /**
231
+ * Navigate to a URL
232
+ */
233
+ async navigateTo(url) {
234
+ this.ensureInitialized("navigateTo");
235
+ // Execute before navigate hooks
236
+ await this.hooks.execute(hook_manager_1.HookEvent.BEFORE_NAVIGATE, {
237
+ platform: this.platform,
238
+ data: { url },
239
+ });
240
+ const startTime = this.logActionStart("navigate", { url });
241
+ try {
242
+ this.logger.navigation(url);
243
+ await this.page.goto(url, {
244
+ timeout: this.getTimeout(),
245
+ waitUntil: "domcontentloaded",
246
+ });
247
+ this.logActionEnd("navigate", startTime, { url });
248
+ // Execute after navigate hooks
249
+ await this.hooks.execute(hook_manager_1.HookEvent.AFTER_NAVIGATE, {
250
+ platform: this.platform,
251
+ data: { url, success: true },
252
+ });
253
+ }
254
+ catch (error) {
255
+ const err = error;
256
+ this.logActionFailed("navigate", err, { url });
257
+ throw new utils_1.NavigationError(url, err.message);
258
+ }
259
+ }
260
+ /**
261
+ * Get current URL
262
+ */
263
+ async getCurrentUrl() {
264
+ this.ensureInitialized("getCurrentUrl");
265
+ return this.page.url();
266
+ }
267
+ /**
268
+ * Get page title
269
+ */
270
+ async getTitle() {
271
+ this.ensureInitialized("getTitle");
272
+ return await this.page.title();
273
+ }
274
+ /**
275
+ * Go back in browser history
276
+ */
277
+ async goBack() {
278
+ this.ensureInitialized("goBack");
279
+ await this.executeAction("goBack", async () => {
280
+ await this.page.goBack({ timeout: this.getTimeout() });
281
+ });
282
+ }
283
+ /**
284
+ * Go forward in browser history
285
+ */
286
+ async goForward() {
287
+ this.ensureInitialized("goForward");
288
+ await this.executeAction("goForward", async () => {
289
+ await this.page.goForward({ timeout: this.getTimeout() });
290
+ });
291
+ }
292
+ /**
293
+ * Refresh the current page
294
+ */
295
+ async refresh() {
296
+ this.ensureInitialized("refresh");
297
+ await this.executeAction("refresh", async () => {
298
+ await this.page.reload({ timeout: this.getTimeout() });
299
+ });
300
+ }
301
+ /**
302
+ * Create a new page/tab
303
+ */
304
+ async newPage() {
305
+ this.ensureInitialized("newPage");
306
+ const page = await this.context.newPage();
307
+ this.setupPageListeners(page);
308
+ this.pages.push(page);
309
+ this.page = page;
310
+ this.logger.debug("Created new page", { totalPages: this.pages.length });
311
+ return page;
312
+ }
313
+ /**
314
+ * Close the current page
315
+ */
316
+ async closePage() {
317
+ this.ensureInitialized("closePage");
318
+ if (this.pages.length <= 1) {
319
+ this.logger.warn("Cannot close the last page");
320
+ return;
321
+ }
322
+ await this.page.close();
323
+ this.logger.debug("Closed page", { remainingPages: this.pages.length });
324
+ }
325
+ /**
326
+ * Get all pages
327
+ */
328
+ getAllPages() {
329
+ this.ensureInitialized("getAllPages");
330
+ return [...this.pages];
331
+ }
332
+ /**
333
+ * Switch to page by index
334
+ */
335
+ async switchToPage(index) {
336
+ this.ensureInitialized("switchToPage");
337
+ if (index < 0 || index >= this.pages.length) {
338
+ throw new Error(`Invalid page index: ${index}. Available pages: ${this.pages.length}`);
339
+ }
340
+ this.page = this.pages[index];
341
+ await this.page.bringToFront();
342
+ this.logger.debug("Switched to page", { index, url: this.page.url() });
343
+ }
344
+ /**
345
+ * Wait for navigation to complete
346
+ */
347
+ async waitForNavigation(options = {}) {
348
+ this.ensureInitialized("waitForNavigation");
349
+ await this.page.waitForNavigation({
350
+ timeout: options.timeout ?? this.getTimeout(),
351
+ });
352
+ }
353
+ /**
354
+ * Wait for page load state
355
+ */
356
+ async waitForLoadState(state = "load") {
357
+ this.ensureInitialized("waitForLoadState");
358
+ await this.page.waitForLoadState(state);
359
+ }
360
+ /**
361
+ * Set viewport size
362
+ */
363
+ async setViewportSize(width, height) {
364
+ this.ensureInitialized("setViewportSize");
365
+ await this.page.setViewportSize({ width, height });
366
+ this.logger.debug("Set viewport size", { width, height });
367
+ }
368
+ /**
369
+ * Take a screenshot
370
+ */
371
+ async takeScreenshot(options = {}) {
372
+ this.ensureInitialized("takeScreenshot");
373
+ // Execute before screenshot hooks
374
+ await this.hooks.execute(hook_manager_1.HookEvent.BEFORE_SCREENSHOT, {
375
+ platform: this.platform,
376
+ data: { options },
377
+ });
378
+ const buffer = await this.page.screenshot({
379
+ fullPage: options.fullPage,
380
+ type: options.type || "png",
381
+ quality: options.type === "jpeg" ? options.quality : undefined,
382
+ clip: options.clip,
383
+ });
384
+ // Save to file if path specified or screenshotOnFailure is enabled
385
+ if (options.path) {
386
+ await this.saveScreenshot(buffer, options);
387
+ }
388
+ // Execute after screenshot hooks
389
+ await this.hooks.execute(hook_manager_1.HookEvent.AFTER_SCREENSHOT, {
390
+ platform: this.platform,
391
+ data: { options, path: options.path },
392
+ });
393
+ return buffer;
394
+ }
395
+ /**
396
+ * Execute JavaScript in the browser
397
+ */
398
+ async executeScript(script, ...args) {
399
+ this.ensureInitialized("executeScript");
400
+ const result = await this.page.evaluate(script, ...args);
401
+ return result;
402
+ }
403
+ /**
404
+ * Get all cookies
405
+ */
406
+ async getCookies() {
407
+ this.ensureInitialized("getCookies");
408
+ const cookies = await this.context.cookies();
409
+ return cookies.map((c) => ({
410
+ name: c.name,
411
+ value: c.value,
412
+ domain: c.domain,
413
+ path: c.path,
414
+ expires: c.expires,
415
+ httpOnly: c.httpOnly,
416
+ secure: c.secure,
417
+ sameSite: c.sameSite,
418
+ }));
419
+ }
420
+ /**
421
+ * Add a cookie
422
+ */
423
+ async addCookie(cookie) {
424
+ this.ensureInitialized("addCookie");
425
+ await this.context.addCookies([
426
+ cookie,
427
+ ]);
428
+ this.logger.debug("Added cookie", { name: cookie.name });
429
+ }
430
+ /**
431
+ * Clear all cookies
432
+ */
433
+ async clearCookies() {
434
+ this.ensureInitialized("clearCookies");
435
+ await this.context.clearCookies();
436
+ this.logger.debug("Cleared all cookies");
437
+ }
438
+ /**
439
+ * Get local storage item
440
+ */
441
+ async getLocalStorage(key) {
442
+ this.ensureInitialized("getLocalStorage");
443
+ return await this.page.evaluate((k) => localStorage.getItem(k), key);
444
+ }
445
+ /**
446
+ * Set local storage item
447
+ */
448
+ async setLocalStorage(key, value) {
449
+ this.ensureInitialized("setLocalStorage");
450
+ await this.page.evaluate(({ k, v }) => localStorage.setItem(k, v), {
451
+ k: key,
452
+ v: value,
453
+ });
454
+ this.logger.debug("Set localStorage", { key });
455
+ }
456
+ /**
457
+ * Clear local storage
458
+ */
459
+ async clearLocalStorage() {
460
+ this.ensureInitialized("clearLocalStorage");
461
+ await this.page.evaluate(() => localStorage.clear());
462
+ this.logger.debug("Cleared localStorage");
463
+ }
464
+ /**
465
+ * Get session storage item
466
+ */
467
+ async getSessionStorage(key) {
468
+ this.ensureInitialized("getSessionStorage");
469
+ return await this.page.evaluate((k) => sessionStorage.getItem(k), key);
470
+ }
471
+ /**
472
+ * Set session storage item
473
+ */
474
+ async setSessionStorage(key, value) {
475
+ this.ensureInitialized("setSessionStorage");
476
+ await this.page.evaluate(({ k, v }) => sessionStorage.setItem(k, v), {
477
+ k: key,
478
+ v: value,
479
+ });
480
+ this.logger.debug("Set sessionStorage", { key });
481
+ }
482
+ /**
483
+ * Clear session storage
484
+ */
485
+ async clearSessionStorage() {
486
+ this.ensureInitialized("clearSessionStorage");
487
+ await this.page.evaluate(() => sessionStorage.clear());
488
+ this.logger.debug("Cleared sessionStorage");
489
+ }
490
+ /**
491
+ * Save storage state to file (cookies + localStorage)
492
+ */
493
+ async saveStorageState(filePath) {
494
+ this.ensureInitialized("saveStorageState");
495
+ const absolutePath = path.resolve(filePath);
496
+ (0, utils_1.ensureDir)(path.dirname(absolutePath));
497
+ await this.context.storageState({ path: absolutePath });
498
+ this.logger.info("Saved storage state", { path: absolutePath });
499
+ }
500
+ /**
501
+ * Start tracing
502
+ */
503
+ async startTracing(options) {
504
+ this.ensureInitialized("startTracing");
505
+ await this.context.tracing.start({
506
+ screenshots: options?.screenshots ?? true,
507
+ snapshots: options?.snapshots ?? true,
508
+ });
509
+ this.logger.debug("Started tracing");
510
+ }
511
+ /**
512
+ * Stop tracing and save to file
513
+ */
514
+ async stopTracing(filePath) {
515
+ this.ensureInitialized("stopTracing");
516
+ const traceDir = this.config.traceDir || "./traces";
517
+ (0, utils_1.ensureDir)(traceDir);
518
+ const absolutePath = path.isAbsolute(filePath)
519
+ ? filePath
520
+ : path.join(traceDir, filePath);
521
+ await this.context.tracing.stop({ path: absolutePath });
522
+ this.logger.info("Stopped tracing", { path: absolutePath });
523
+ }
524
+ /**
525
+ * Quit the driver and close the browser
526
+ */
527
+ async quit() {
528
+ if (!this.initialized) {
529
+ return;
530
+ }
531
+ // Execute before quit hooks
532
+ await this.hooks.execute(hook_manager_1.HookEvent.BEFORE_DRIVER_QUIT, {
533
+ platform: this.platform,
534
+ driverStatus: this.getStatus(),
535
+ });
536
+ try {
537
+ // Close all pages
538
+ for (const page of this.pages) {
539
+ await page.close().catch(() => {
540
+ /* ignore errors */
541
+ });
542
+ }
543
+ this.pages = [];
544
+ this.page = null;
545
+ // Close context
546
+ if (this.context) {
547
+ await this.context.close().catch(() => {
548
+ /* ignore errors */
549
+ });
550
+ this.context = null;
551
+ }
552
+ // Close browser
553
+ if (this.browser) {
554
+ await this.browser.close();
555
+ this.browser = null;
556
+ }
557
+ await super.quit();
558
+ // Execute after quit hooks
559
+ await this.hooks.execute(hook_manager_1.HookEvent.AFTER_DRIVER_QUIT, {
560
+ platform: this.platform,
561
+ });
562
+ }
563
+ catch (error) {
564
+ this.logger.error("Error during WebDriver quit", {
565
+ error: error.message,
566
+ });
567
+ }
568
+ }
569
+ }
570
+ exports.WebDriver = WebDriver;
571
+ //# sourceMappingURL=web.driver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web.driver.js","sourceRoot":"","sources":["../../src/web/web.driver.ts"],"names":[],"mappings":"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"}