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.
- package/LICENSE +21 -0
- package/README.md +225 -0
- package/dist/api/api.assertions.d.ts +196 -0
- package/dist/api/api.assertions.d.ts.map +1 -0
- package/dist/api/api.assertions.js +462 -0
- package/dist/api/api.assertions.js.map +1 -0
- package/dist/api/api.builder.d.ts +134 -0
- package/dist/api/api.builder.d.ts.map +1 -0
- package/dist/api/api.builder.js +273 -0
- package/dist/api/api.builder.js.map +1 -0
- package/dist/api/api.client.d.ts +157 -0
- package/dist/api/api.client.d.ts.map +1 -0
- package/dist/api/api.client.js +493 -0
- package/dist/api/api.client.js.map +1 -0
- package/dist/api/index.d.ts +8 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +17 -0
- package/dist/api/index.js.map +1 -0
- package/dist/core/base.driver.d.ts +130 -0
- package/dist/core/base.driver.d.ts.map +1 -0
- package/dist/core/base.driver.js +264 -0
- package/dist/core/base.driver.js.map +1 -0
- package/dist/core/driver.factory.d.ts +120 -0
- package/dist/core/driver.factory.d.ts.map +1 -0
- package/dist/core/driver.factory.js +222 -0
- package/dist/core/driver.factory.js.map +1 -0
- package/dist/core/element.actions.d.ts +119 -0
- package/dist/core/element.actions.d.ts.map +1 -0
- package/dist/core/element.actions.js +379 -0
- package/dist/core/element.actions.js.map +1 -0
- package/dist/core/hook.manager.d.ts +186 -0
- package/dist/core/hook.manager.d.ts.map +1 -0
- package/dist/core/hook.manager.js +297 -0
- package/dist/core/hook.manager.js.map +1 -0
- package/dist/core/index.d.ts +8 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +22 -0
- package/dist/core/index.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +128 -0
- package/dist/index.js.map +1 -0
- package/dist/mobile/index.d.ts +7 -0
- package/dist/mobile/index.d.ts.map +1 -0
- package/dist/mobile/index.js +14 -0
- package/dist/mobile/index.js.map +1 -0
- package/dist/mobile/mobile.assertions.d.ts +146 -0
- package/dist/mobile/mobile.assertions.d.ts.map +1 -0
- package/dist/mobile/mobile.assertions.js +333 -0
- package/dist/mobile/mobile.assertions.js.map +1 -0
- package/dist/mobile/mobile.driver.d.ts +297 -0
- package/dist/mobile/mobile.driver.d.ts.map +1 -0
- package/dist/mobile/mobile.driver.js +808 -0
- package/dist/mobile/mobile.driver.js.map +1 -0
- package/dist/types/common.types.d.ts +200 -0
- package/dist/types/common.types.d.ts.map +1 -0
- package/dist/types/common.types.js +3 -0
- package/dist/types/common.types.js.map +1 -0
- package/dist/types/config.types.d.ts +192 -0
- package/dist/types/config.types.d.ts.map +1 -0
- package/dist/types/config.types.js +3 -0
- package/dist/types/config.types.js.map +1 -0
- package/dist/types/driver.types.d.ts +500 -0
- package/dist/types/driver.types.d.ts.map +1 -0
- package/dist/types/driver.types.js +3 -0
- package/dist/types/driver.types.js.map +1 -0
- package/dist/types/enums.d.ts +53 -0
- package/dist/types/enums.d.ts.map +1 -0
- package/dist/types/enums.js +62 -0
- package/dist/types/enums.js.map +1 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +15 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/config.manager.d.ts +144 -0
- package/dist/utils/config.manager.d.ts.map +1 -0
- package/dist/utils/config.manager.js +473 -0
- package/dist/utils/config.manager.js.map +1 -0
- package/dist/utils/errors.d.ts +149 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +290 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/helpers.d.ts +124 -0
- package/dist/utils/helpers.d.ts.map +1 -0
- package/dist/utils/helpers.js +421 -0
- package/dist/utils/helpers.js.map +1 -0
- package/dist/utils/index.d.ts +9 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +78 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +145 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +235 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/wait.utils.d.ts +95 -0
- package/dist/utils/wait.utils.d.ts.map +1 -0
- package/dist/utils/wait.utils.js +306 -0
- package/dist/utils/wait.utils.js.map +1 -0
- package/dist/web/index.d.ts +8 -0
- package/dist/web/index.d.ts.map +1 -0
- package/dist/web/index.js +16 -0
- package/dist/web/index.js.map +1 -0
- package/dist/web/web.assertions.d.ts +164 -0
- package/dist/web/web.assertions.d.ts.map +1 -0
- package/dist/web/web.assertions.js +427 -0
- package/dist/web/web.assertions.js.map +1 -0
- package/dist/web/web.driver.d.ts +174 -0
- package/dist/web/web.driver.d.ts.map +1 -0
- package/dist/web/web.driver.js +571 -0
- package/dist/web/web.driver.js.map +1 -0
- package/dist/web/web.page.d.ts +286 -0
- package/dist/web/web.page.d.ts.map +1 -0
- package/dist/web/web.page.js +570 -0
- package/dist/web/web.page.js.map +1 -0
- package/package.json +115 -0
|
@@ -0,0 +1,264 @@
|
|
|
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.BaseDriver = void 0;
|
|
37
|
+
const utils_1 = require("../utils");
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const fs = __importStar(require("fs"));
|
|
40
|
+
/**
|
|
41
|
+
* Abstract base driver class that all platform drivers must extend.
|
|
42
|
+
* Provides common functionality and enforces consistent API across platforms.
|
|
43
|
+
*/
|
|
44
|
+
class BaseDriver {
|
|
45
|
+
/** Platform type */
|
|
46
|
+
platform;
|
|
47
|
+
/** Driver configuration */
|
|
48
|
+
config;
|
|
49
|
+
/** Logger instance */
|
|
50
|
+
logger;
|
|
51
|
+
/** Session ID */
|
|
52
|
+
sessionId;
|
|
53
|
+
/** Initialization state */
|
|
54
|
+
initialized = false;
|
|
55
|
+
/** Session start time */
|
|
56
|
+
startTime;
|
|
57
|
+
/** Implicit wait timeout */
|
|
58
|
+
implicitWaitTimeout = 0;
|
|
59
|
+
/**
|
|
60
|
+
* Create a new BaseDriver instance
|
|
61
|
+
* @param platform - The platform type (web, api, mobile)
|
|
62
|
+
* @param config - Driver configuration
|
|
63
|
+
* @param logger - Optional logger instance
|
|
64
|
+
*/
|
|
65
|
+
constructor(platform, config, logger) {
|
|
66
|
+
this.platform = platform;
|
|
67
|
+
this.config = config;
|
|
68
|
+
this.logger = logger || utils_1.Logger.createLogger(platform);
|
|
69
|
+
// Set default timeout from config
|
|
70
|
+
if (config.timeout) {
|
|
71
|
+
this.implicitWaitTimeout = config.timeout;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Quit the driver and cleanup - can be overridden by subclasses
|
|
76
|
+
*/
|
|
77
|
+
async quit() {
|
|
78
|
+
this.logger.info(`Quitting ${this.platform} driver`, {
|
|
79
|
+
sessionId: this.sessionId,
|
|
80
|
+
});
|
|
81
|
+
this.initialized = false;
|
|
82
|
+
this.sessionId = undefined;
|
|
83
|
+
this.startTime = undefined;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Check if driver is initialized
|
|
87
|
+
*/
|
|
88
|
+
isInitialized() {
|
|
89
|
+
return this.initialized;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Get current platform
|
|
93
|
+
*/
|
|
94
|
+
getPlatform() {
|
|
95
|
+
return this.platform;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Get session ID
|
|
99
|
+
*/
|
|
100
|
+
getSessionId() {
|
|
101
|
+
return this.sessionId;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Get driver status
|
|
105
|
+
*/
|
|
106
|
+
getStatus() {
|
|
107
|
+
return {
|
|
108
|
+
isInitialized: this.initialized,
|
|
109
|
+
sessionId: this.sessionId,
|
|
110
|
+
platform: this.platform,
|
|
111
|
+
startTime: this.startTime,
|
|
112
|
+
info: {
|
|
113
|
+
implicitWaitTimeout: this.implicitWaitTimeout,
|
|
114
|
+
config: this.getSafeConfig(),
|
|
115
|
+
},
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Set implicit wait timeout
|
|
120
|
+
*/
|
|
121
|
+
async setImplicitWait(timeout) {
|
|
122
|
+
this.implicitWaitTimeout = timeout;
|
|
123
|
+
this.logger.debug(`Set implicit wait to ${timeout}ms`);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Get implicit wait timeout
|
|
127
|
+
*/
|
|
128
|
+
getImplicitWait() {
|
|
129
|
+
return this.implicitWaitTimeout;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Get the configuration
|
|
133
|
+
*/
|
|
134
|
+
getConfig() {
|
|
135
|
+
return this.config;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Get the logger instance
|
|
139
|
+
*/
|
|
140
|
+
getLogger() {
|
|
141
|
+
return this.logger;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Ensure driver is initialized, throw error if not
|
|
145
|
+
*/
|
|
146
|
+
ensureInitialized(operation) {
|
|
147
|
+
if (!this.initialized) {
|
|
148
|
+
throw new utils_1.DriverNotInitializedError(this.platform, operation);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Generate a new session ID
|
|
153
|
+
*/
|
|
154
|
+
generateSessionId() {
|
|
155
|
+
this.sessionId = (0, utils_1.generateId)(`${this.platform}-session`);
|
|
156
|
+
return this.sessionId;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Mark driver as initialized
|
|
160
|
+
*/
|
|
161
|
+
markInitialized() {
|
|
162
|
+
this.initialized = true;
|
|
163
|
+
this.startTime = new Date();
|
|
164
|
+
this.logger.info(`${this.platform} driver initialized`, {
|
|
165
|
+
sessionId: this.sessionId,
|
|
166
|
+
startTime: this.startTime.toISOString(),
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Save screenshot to file
|
|
171
|
+
*/
|
|
172
|
+
async saveScreenshot(buffer, options) {
|
|
173
|
+
const screenshotDir = this.config.screenshotDir || "./screenshots";
|
|
174
|
+
(0, utils_1.ensureDir)(screenshotDir);
|
|
175
|
+
const filename = options?.path || this.generateScreenshotFilename(options?.type || "png");
|
|
176
|
+
const fullPath = path.isAbsolute(filename)
|
|
177
|
+
? filename
|
|
178
|
+
: path.join(screenshotDir, filename);
|
|
179
|
+
// Ensure directory exists for the full path
|
|
180
|
+
(0, utils_1.ensureDir)(path.dirname(fullPath));
|
|
181
|
+
fs.writeFileSync(fullPath, buffer);
|
|
182
|
+
this.logger.screenshot(fullPath);
|
|
183
|
+
return fullPath;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Generate a unique screenshot filename
|
|
187
|
+
*/
|
|
188
|
+
generateScreenshotFilename(extension = "png") {
|
|
189
|
+
const timestamp = (0, utils_1.formatTimestamp)(new Date(), "YYYY-MM-DD_HH-mm-ss-SSS");
|
|
190
|
+
return `screenshot_${timestamp}_${(0, utils_1.generateId)()}.${extension}`;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Get safe config (without sensitive data) for logging
|
|
194
|
+
*/
|
|
195
|
+
getSafeConfig() {
|
|
196
|
+
const safeConfig = { ...this.config };
|
|
197
|
+
// Remove sensitive fields
|
|
198
|
+
const sensitiveFields = [
|
|
199
|
+
"password",
|
|
200
|
+
"token",
|
|
201
|
+
"apiKey",
|
|
202
|
+
"secret",
|
|
203
|
+
"credentials",
|
|
204
|
+
];
|
|
205
|
+
for (const field of sensitiveFields) {
|
|
206
|
+
if (field in safeConfig) {
|
|
207
|
+
safeConfig[field] = "***REDACTED***";
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return safeConfig;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Log action start
|
|
214
|
+
*/
|
|
215
|
+
logActionStart(action, details) {
|
|
216
|
+
this.logger.actionStart(action, details);
|
|
217
|
+
return Date.now();
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Log action end
|
|
221
|
+
*/
|
|
222
|
+
logActionEnd(action, startTime, details) {
|
|
223
|
+
const duration = Date.now() - startTime;
|
|
224
|
+
this.logger.actionEnd(action, duration, details);
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Log action failure
|
|
228
|
+
*/
|
|
229
|
+
logActionFailed(action, error, details) {
|
|
230
|
+
this.logger.actionFailed(action, error, details);
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Execute an action with logging
|
|
234
|
+
*/
|
|
235
|
+
async executeAction(actionName, action, details) {
|
|
236
|
+
const startTime = this.logActionStart(actionName, details);
|
|
237
|
+
try {
|
|
238
|
+
const result = await action();
|
|
239
|
+
this.logActionEnd(actionName, startTime, details);
|
|
240
|
+
return result;
|
|
241
|
+
}
|
|
242
|
+
catch (error) {
|
|
243
|
+
this.logActionFailed(actionName, error, details);
|
|
244
|
+
throw error;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Get session duration in milliseconds
|
|
249
|
+
*/
|
|
250
|
+
getSessionDuration() {
|
|
251
|
+
if (!this.startTime) {
|
|
252
|
+
return undefined;
|
|
253
|
+
}
|
|
254
|
+
return Date.now() - this.startTime.getTime();
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Get timeout value (config or default)
|
|
258
|
+
*/
|
|
259
|
+
getTimeout(overrideTimeout) {
|
|
260
|
+
return overrideTimeout ?? this.config.timeout ?? 30000;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
exports.BaseDriver = BaseDriver;
|
|
264
|
+
//# sourceMappingURL=base.driver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.driver.js","sourceRoot":"","sources":["../../src/core/base.driver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { Platform, WebConfig, ApiConfig, MobileConfig, FrameworkConfig, IWebDriver, IApiDriver, IMobileDriver } from "../types";
|
|
2
|
+
import { Logger } from "../utils";
|
|
3
|
+
import { BaseDriver } from "./base.driver";
|
|
4
|
+
/**
|
|
5
|
+
* Driver creation options
|
|
6
|
+
*/
|
|
7
|
+
export interface DriverOptions {
|
|
8
|
+
/** Override configuration */
|
|
9
|
+
config?: Partial<WebConfig | ApiConfig | MobileConfig>;
|
|
10
|
+
/** Custom logger */
|
|
11
|
+
logger?: Logger;
|
|
12
|
+
/** Auto-initialize driver */
|
|
13
|
+
autoInitialize?: boolean;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Registered driver class type
|
|
17
|
+
*/
|
|
18
|
+
export type DriverClass<T extends BaseDriver = BaseDriver> = new (config: WebConfig | ApiConfig | MobileConfig, logger?: Logger) => T;
|
|
19
|
+
/**
|
|
20
|
+
* Factory class for creating platform-specific drivers.
|
|
21
|
+
* Supports registration of custom driver implementations.
|
|
22
|
+
*/
|
|
23
|
+
export declare class DriverFactory {
|
|
24
|
+
/** Singleton instance */
|
|
25
|
+
private static instance;
|
|
26
|
+
/** Driver registry */
|
|
27
|
+
private registry;
|
|
28
|
+
/** Active drivers */
|
|
29
|
+
private activeDrivers;
|
|
30
|
+
/** Logger */
|
|
31
|
+
private logger;
|
|
32
|
+
/** Config manager */
|
|
33
|
+
private configManager;
|
|
34
|
+
constructor();
|
|
35
|
+
/**
|
|
36
|
+
* Get singleton instance
|
|
37
|
+
*/
|
|
38
|
+
static getInstance(): DriverFactory;
|
|
39
|
+
/**
|
|
40
|
+
* Reset singleton instance (useful for testing)
|
|
41
|
+
*/
|
|
42
|
+
static resetInstance(): void;
|
|
43
|
+
/**
|
|
44
|
+
* Register a driver class for a platform
|
|
45
|
+
*/
|
|
46
|
+
register<T extends BaseDriver>(platform: Platform, driverClass: DriverClass<T>, defaultConfig: WebConfig | ApiConfig | MobileConfig): this;
|
|
47
|
+
/**
|
|
48
|
+
* Check if a driver is registered for a platform
|
|
49
|
+
*/
|
|
50
|
+
isRegistered(platform: Platform): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Get registered platforms
|
|
53
|
+
*/
|
|
54
|
+
getRegisteredPlatforms(): Platform[];
|
|
55
|
+
/**
|
|
56
|
+
* Create a driver for the specified platform
|
|
57
|
+
*/
|
|
58
|
+
create<T extends BaseDriver>(platform: Platform, options?: DriverOptions): Promise<T>;
|
|
59
|
+
/**
|
|
60
|
+
* Create a web driver
|
|
61
|
+
*/
|
|
62
|
+
createWebDriver(options?: DriverOptions): Promise<IWebDriver>;
|
|
63
|
+
/**
|
|
64
|
+
* Create an API driver
|
|
65
|
+
*/
|
|
66
|
+
createApiDriver(options?: DriverOptions): Promise<IApiDriver>;
|
|
67
|
+
/**
|
|
68
|
+
* Create a mobile driver
|
|
69
|
+
*/
|
|
70
|
+
createMobileDriver(options?: DriverOptions): Promise<IMobileDriver>;
|
|
71
|
+
/**
|
|
72
|
+
* Get configuration for a platform
|
|
73
|
+
*/
|
|
74
|
+
private getConfigForPlatform;
|
|
75
|
+
/**
|
|
76
|
+
* Get an active driver by session ID
|
|
77
|
+
*/
|
|
78
|
+
getDriver(sessionId: string): BaseDriver | undefined;
|
|
79
|
+
/**
|
|
80
|
+
* Get all active drivers
|
|
81
|
+
*/
|
|
82
|
+
getActiveDrivers(): BaseDriver[];
|
|
83
|
+
/**
|
|
84
|
+
* Get active driver count
|
|
85
|
+
*/
|
|
86
|
+
getActiveDriverCount(): number;
|
|
87
|
+
/**
|
|
88
|
+
* Quit a specific driver
|
|
89
|
+
*/
|
|
90
|
+
quit(sessionId: string): Promise<void>;
|
|
91
|
+
/**
|
|
92
|
+
* Quit all active drivers
|
|
93
|
+
*/
|
|
94
|
+
quitAll(): Promise<void>;
|
|
95
|
+
/**
|
|
96
|
+
* Remove a driver from tracking (without quitting)
|
|
97
|
+
*/
|
|
98
|
+
untrack(sessionId: string): void;
|
|
99
|
+
/**
|
|
100
|
+
* Load configuration from environment/files
|
|
101
|
+
*/
|
|
102
|
+
loadConfig(envPath?: string, configPath?: string): this;
|
|
103
|
+
/**
|
|
104
|
+
* Set framework configuration
|
|
105
|
+
*/
|
|
106
|
+
setConfig(config: Partial<FrameworkConfig>): this;
|
|
107
|
+
/**
|
|
108
|
+
* Get current framework configuration
|
|
109
|
+
*/
|
|
110
|
+
getConfig(): FrameworkConfig;
|
|
111
|
+
/**
|
|
112
|
+
* Validate configuration
|
|
113
|
+
*/
|
|
114
|
+
validateConfig(): {
|
|
115
|
+
valid: boolean;
|
|
116
|
+
errors: string[];
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
export declare const getDriverFactory: () => DriverFactory;
|
|
120
|
+
//# sourceMappingURL=driver.factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"driver.factory.d.ts","sourceRoot":"","sources":["../../src/core/driver.factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getDriverFactory = exports.DriverFactory = void 0;
|
|
4
|
+
const types_1 = require("../types");
|
|
5
|
+
const utils_1 = require("../utils");
|
|
6
|
+
/**
|
|
7
|
+
* Factory class for creating platform-specific drivers.
|
|
8
|
+
* Supports registration of custom driver implementations.
|
|
9
|
+
*/
|
|
10
|
+
class DriverFactory {
|
|
11
|
+
/** Singleton instance */
|
|
12
|
+
static instance = null;
|
|
13
|
+
/** Driver registry */
|
|
14
|
+
registry = new Map();
|
|
15
|
+
/** Active drivers */
|
|
16
|
+
activeDrivers = new Map();
|
|
17
|
+
/** Logger */
|
|
18
|
+
logger;
|
|
19
|
+
/** Config manager */
|
|
20
|
+
configManager;
|
|
21
|
+
constructor() {
|
|
22
|
+
this.logger = utils_1.Logger.createLogger("DriverFactory");
|
|
23
|
+
this.configManager = utils_1.ConfigManager.getInstance();
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Get singleton instance
|
|
27
|
+
*/
|
|
28
|
+
static getInstance() {
|
|
29
|
+
if (!DriverFactory.instance) {
|
|
30
|
+
DriverFactory.instance = new DriverFactory();
|
|
31
|
+
}
|
|
32
|
+
return DriverFactory.instance;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Reset singleton instance (useful for testing)
|
|
36
|
+
*/
|
|
37
|
+
static resetInstance() {
|
|
38
|
+
if (DriverFactory.instance) {
|
|
39
|
+
// Cleanup all active drivers
|
|
40
|
+
DriverFactory.instance.quitAll().catch(console.error);
|
|
41
|
+
}
|
|
42
|
+
DriverFactory.instance = null;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Register a driver class for a platform
|
|
46
|
+
*/
|
|
47
|
+
register(platform, driverClass, defaultConfig) {
|
|
48
|
+
this.registry.set(platform, {
|
|
49
|
+
driverClass: driverClass,
|
|
50
|
+
defaultConfig,
|
|
51
|
+
});
|
|
52
|
+
this.logger.debug(`Registered driver for platform: ${platform}`);
|
|
53
|
+
return this;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Check if a driver is registered for a platform
|
|
57
|
+
*/
|
|
58
|
+
isRegistered(platform) {
|
|
59
|
+
return this.registry.has(platform);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Get registered platforms
|
|
63
|
+
*/
|
|
64
|
+
getRegisteredPlatforms() {
|
|
65
|
+
return Array.from(this.registry.keys());
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Create a driver for the specified platform
|
|
69
|
+
*/
|
|
70
|
+
async create(platform, options = {}) {
|
|
71
|
+
const entry = this.registry.get(platform);
|
|
72
|
+
if (!entry) {
|
|
73
|
+
throw new utils_1.ConfigurationError(`No driver registered for platform: ${platform}. ` +
|
|
74
|
+
`Available platforms: ${this.getRegisteredPlatforms().join(", ")}`);
|
|
75
|
+
}
|
|
76
|
+
// Get configuration
|
|
77
|
+
const baseConfig = this.getConfigForPlatform(platform);
|
|
78
|
+
const mergedConfig = {
|
|
79
|
+
...entry.defaultConfig,
|
|
80
|
+
...baseConfig,
|
|
81
|
+
...options.config,
|
|
82
|
+
};
|
|
83
|
+
// Create logger
|
|
84
|
+
const logger = options.logger || utils_1.Logger.createLogger(platform);
|
|
85
|
+
// Create driver instance
|
|
86
|
+
this.logger.info(`Creating ${platform} driver`);
|
|
87
|
+
const driver = new entry.driverClass(mergedConfig, logger);
|
|
88
|
+
// Auto-initialize if requested
|
|
89
|
+
if (options.autoInitialize !== false) {
|
|
90
|
+
await driver.initialize();
|
|
91
|
+
}
|
|
92
|
+
// Track active driver
|
|
93
|
+
const sessionId = driver.getSessionId() || `temp-${Date.now()}`;
|
|
94
|
+
this.activeDrivers.set(sessionId, driver);
|
|
95
|
+
return driver;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Create a web driver
|
|
99
|
+
*/
|
|
100
|
+
async createWebDriver(options = {}) {
|
|
101
|
+
return this.create(types_1.Platform.WEB, options);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Create an API driver
|
|
105
|
+
*/
|
|
106
|
+
async createApiDriver(options = {}) {
|
|
107
|
+
return this.create(types_1.Platform.API, options);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Create a mobile driver
|
|
111
|
+
*/
|
|
112
|
+
async createMobileDriver(options = {}) {
|
|
113
|
+
return this.create(types_1.Platform.MOBILE, options);
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Get configuration for a platform
|
|
117
|
+
*/
|
|
118
|
+
getConfigForPlatform(platform) {
|
|
119
|
+
switch (platform) {
|
|
120
|
+
case types_1.Platform.WEB:
|
|
121
|
+
return this.configManager.getWebConfig();
|
|
122
|
+
case types_1.Platform.API:
|
|
123
|
+
return this.configManager.getApiConfig();
|
|
124
|
+
case types_1.Platform.MOBILE:
|
|
125
|
+
return this.configManager.getMobileConfig();
|
|
126
|
+
default:
|
|
127
|
+
throw new utils_1.ConfigurationError(`Unknown platform: ${platform}`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Get an active driver by session ID
|
|
132
|
+
*/
|
|
133
|
+
getDriver(sessionId) {
|
|
134
|
+
return this.activeDrivers.get(sessionId);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Get all active drivers
|
|
138
|
+
*/
|
|
139
|
+
getActiveDrivers() {
|
|
140
|
+
return Array.from(this.activeDrivers.values());
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Get active driver count
|
|
144
|
+
*/
|
|
145
|
+
getActiveDriverCount() {
|
|
146
|
+
return this.activeDrivers.size;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Quit a specific driver
|
|
150
|
+
*/
|
|
151
|
+
async quit(sessionId) {
|
|
152
|
+
const driver = this.activeDrivers.get(sessionId);
|
|
153
|
+
if (driver) {
|
|
154
|
+
await driver.quit();
|
|
155
|
+
this.activeDrivers.delete(sessionId);
|
|
156
|
+
this.logger.info(`Driver quit: ${sessionId}`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Quit all active drivers
|
|
161
|
+
*/
|
|
162
|
+
async quitAll() {
|
|
163
|
+
this.logger.info(`Quitting all drivers (count: ${this.activeDrivers.size})`);
|
|
164
|
+
const quitPromises = Array.from(this.activeDrivers.entries()).map(async ([sessionId, driver]) => {
|
|
165
|
+
try {
|
|
166
|
+
await driver.quit();
|
|
167
|
+
this.logger.debug(`Driver quit: ${sessionId}`);
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
this.logger.error(`Failed to quit driver ${sessionId}: ${error.message}`);
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
await Promise.all(quitPromises);
|
|
174
|
+
this.activeDrivers.clear();
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Remove a driver from tracking (without quitting)
|
|
178
|
+
*/
|
|
179
|
+
untrack(sessionId) {
|
|
180
|
+
this.activeDrivers.delete(sessionId);
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Load configuration from environment/files
|
|
184
|
+
*/
|
|
185
|
+
loadConfig(envPath, configPath) {
|
|
186
|
+
if (envPath) {
|
|
187
|
+
this.configManager.loadFromEnv(envPath);
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
this.configManager.loadFromEnv();
|
|
191
|
+
}
|
|
192
|
+
if (configPath) {
|
|
193
|
+
this.configManager.loadFromFile(configPath);
|
|
194
|
+
}
|
|
195
|
+
this.configManager.applyDefaults();
|
|
196
|
+
return this;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Set framework configuration
|
|
200
|
+
*/
|
|
201
|
+
setConfig(config) {
|
|
202
|
+
this.configManager.loadFromObject(config);
|
|
203
|
+
return this;
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Get current framework configuration
|
|
207
|
+
*/
|
|
208
|
+
getConfig() {
|
|
209
|
+
return this.configManager.getConfig();
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Validate configuration
|
|
213
|
+
*/
|
|
214
|
+
validateConfig() {
|
|
215
|
+
return this.configManager.validate();
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
exports.DriverFactory = DriverFactory;
|
|
219
|
+
// Export convenience function
|
|
220
|
+
const getDriverFactory = () => DriverFactory.getInstance();
|
|
221
|
+
exports.getDriverFactory = getDriverFactory;
|
|
222
|
+
//# sourceMappingURL=driver.factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"driver.factory.js","sourceRoot":"","sources":["../../src/core/driver.factory.ts"],"names":[],"mappings":"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"}
|