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,570 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WebPage = void 0;
|
|
4
|
+
const element_actions_1 = require("../core/element.actions");
|
|
5
|
+
const hook_manager_1 = require("../core/hook.manager");
|
|
6
|
+
const types_1 = require("../types");
|
|
7
|
+
const utils_1 = require("../utils");
|
|
8
|
+
/**
|
|
9
|
+
* WebPage class providing high-level element interactions for Playwright.
|
|
10
|
+
*/
|
|
11
|
+
class WebPage {
|
|
12
|
+
page;
|
|
13
|
+
logger;
|
|
14
|
+
hooks;
|
|
15
|
+
defaultTimeout;
|
|
16
|
+
elementActions;
|
|
17
|
+
/**
|
|
18
|
+
* Create a new WebPage instance
|
|
19
|
+
*/
|
|
20
|
+
constructor(page, logger, defaultTimeout = 30000) {
|
|
21
|
+
this.page = page;
|
|
22
|
+
this.logger = logger || utils_1.Logger.getInstance();
|
|
23
|
+
this.hooks = (0, hook_manager_1.getHookManager)();
|
|
24
|
+
this.defaultTimeout = defaultTimeout;
|
|
25
|
+
// Set up element actions with Playwright-specific resolver and checker
|
|
26
|
+
const resolver = this.resolveLocator.bind(this);
|
|
27
|
+
const checker = {
|
|
28
|
+
isVisible: async (el) => await el.isVisible(),
|
|
29
|
+
isEnabled: async (el) => await el.isEnabled(),
|
|
30
|
+
isSelected: async (el) => {
|
|
31
|
+
const tagName = await el.evaluate((e) => e.tagName.toLowerCase());
|
|
32
|
+
if (tagName === "input") {
|
|
33
|
+
const type = await el.getAttribute("type");
|
|
34
|
+
if (type === "checkbox" || type === "radio") {
|
|
35
|
+
return await el.isChecked();
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return false;
|
|
39
|
+
},
|
|
40
|
+
getText: async (el) => (await el.textContent()) || "",
|
|
41
|
+
getAttribute: async (el, name) => await el.getAttribute(name),
|
|
42
|
+
getBoundingBox: async (el) => await el.boundingBox(),
|
|
43
|
+
};
|
|
44
|
+
this.elementActions = new element_actions_1.ElementActions(resolver, checker, this.logger, defaultTimeout);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Resolve locator string to Playwright Locator
|
|
48
|
+
*/
|
|
49
|
+
async resolveLocator(locator) {
|
|
50
|
+
const parsed = this.elementActions.parseLocator(locator);
|
|
51
|
+
switch (parsed.strategy) {
|
|
52
|
+
case "css":
|
|
53
|
+
return this.page.locator(parsed.value);
|
|
54
|
+
case "xpath":
|
|
55
|
+
return this.page.locator(`xpath=${parsed.value}`);
|
|
56
|
+
case "id":
|
|
57
|
+
return this.page.locator(`#${parsed.value}`);
|
|
58
|
+
case "class":
|
|
59
|
+
return this.page.locator(`.${parsed.value}`);
|
|
60
|
+
case "name":
|
|
61
|
+
return this.page.locator(`[name="${parsed.value}"]`);
|
|
62
|
+
case "text":
|
|
63
|
+
return this.page.locator(`text=${parsed.value}`);
|
|
64
|
+
case "accessibility":
|
|
65
|
+
return this.page
|
|
66
|
+
.getByRole("button", { name: parsed.value })
|
|
67
|
+
.or(this.page.getByLabel(parsed.value))
|
|
68
|
+
.or(this.page.getByText(parsed.value));
|
|
69
|
+
default:
|
|
70
|
+
return this.page.locator(parsed.value);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Get underlying Playwright page
|
|
75
|
+
*/
|
|
76
|
+
getPage() {
|
|
77
|
+
return this.page;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Get Playwright locator from string or Locator object
|
|
81
|
+
*/
|
|
82
|
+
async getLocator(locator) {
|
|
83
|
+
return await this.resolveLocator(locator);
|
|
84
|
+
}
|
|
85
|
+
// ============ Element Finding ============
|
|
86
|
+
/**
|
|
87
|
+
* Find element
|
|
88
|
+
*/
|
|
89
|
+
async findElement(locator, options) {
|
|
90
|
+
return await this.elementActions.findElement(locator, options);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Find all elements matching locator
|
|
94
|
+
*/
|
|
95
|
+
async findElements(locator) {
|
|
96
|
+
const playwrightLocator = await this.resolveLocator(locator);
|
|
97
|
+
const count = await playwrightLocator.count();
|
|
98
|
+
const elements = [];
|
|
99
|
+
for (let i = 0; i < count; i++) {
|
|
100
|
+
elements.push(playwrightLocator.nth(i));
|
|
101
|
+
}
|
|
102
|
+
return elements;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Get element count
|
|
106
|
+
*/
|
|
107
|
+
async getElementCount(locator) {
|
|
108
|
+
const playwrightLocator = await this.resolveLocator(locator);
|
|
109
|
+
return await playwrightLocator.count();
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Check if element exists
|
|
113
|
+
*/
|
|
114
|
+
async exists(locator, timeout) {
|
|
115
|
+
return await this.elementActions.exists(locator, timeout);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Check if element is visible
|
|
119
|
+
*/
|
|
120
|
+
async isVisible(locator) {
|
|
121
|
+
return await this.elementActions.isVisible(locator);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Check if element is enabled
|
|
125
|
+
*/
|
|
126
|
+
async isEnabled(locator) {
|
|
127
|
+
return await this.elementActions.isEnabled(locator);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Check if checkbox/radio is checked
|
|
131
|
+
*/
|
|
132
|
+
async isChecked(locator) {
|
|
133
|
+
const element = await this.resolveLocator(locator);
|
|
134
|
+
return await element.isChecked();
|
|
135
|
+
}
|
|
136
|
+
// ============ Wait Methods ============
|
|
137
|
+
/**
|
|
138
|
+
* Wait for element to be visible
|
|
139
|
+
*/
|
|
140
|
+
async waitForVisible(locator, options) {
|
|
141
|
+
return await this.elementActions.waitForVisible(locator, options);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Wait for element to be hidden
|
|
145
|
+
*/
|
|
146
|
+
async waitForHidden(locator, options) {
|
|
147
|
+
return await this.elementActions.waitForNotVisible(locator, options);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Wait for element to be enabled
|
|
151
|
+
*/
|
|
152
|
+
async waitForEnabled(locator, options) {
|
|
153
|
+
return await this.elementActions.waitForEnabled(locator, options);
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Wait for element to be clickable
|
|
157
|
+
*/
|
|
158
|
+
async waitForClickable(locator, options) {
|
|
159
|
+
return await this.elementActions.waitForClickable(locator, options);
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Wait for text content
|
|
163
|
+
*/
|
|
164
|
+
async waitForText(locator, text, options) {
|
|
165
|
+
return await this.elementActions.waitForText(locator, text, options);
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Wait for text to contain
|
|
169
|
+
*/
|
|
170
|
+
async waitForTextContains(locator, text, options) {
|
|
171
|
+
return await this.elementActions.waitForTextContains(locator, text, options);
|
|
172
|
+
}
|
|
173
|
+
// ============ Click Actions ============
|
|
174
|
+
/**
|
|
175
|
+
* Click on element
|
|
176
|
+
*/
|
|
177
|
+
async click(locator, options = {}) {
|
|
178
|
+
const description = this.elementActions.getLocatorDescription(locator);
|
|
179
|
+
// Execute before click hooks
|
|
180
|
+
await this.hooks.execute(hook_manager_1.HookEvent.BEFORE_CLICK, {
|
|
181
|
+
platform: types_1.Platform.WEB,
|
|
182
|
+
data: { locator: description, options },
|
|
183
|
+
});
|
|
184
|
+
this.logger.elementAction("click", description);
|
|
185
|
+
const element = await this.elementActions.prepareElement(locator, options);
|
|
186
|
+
await element.click({
|
|
187
|
+
button: options.button,
|
|
188
|
+
clickCount: options.clickCount,
|
|
189
|
+
position: options.position,
|
|
190
|
+
modifiers: options.modifiers,
|
|
191
|
+
force: options.force,
|
|
192
|
+
timeout: options.timeout ?? this.defaultTimeout,
|
|
193
|
+
});
|
|
194
|
+
// Execute after click hooks
|
|
195
|
+
await this.hooks.execute(hook_manager_1.HookEvent.AFTER_CLICK, {
|
|
196
|
+
platform: types_1.Platform.WEB,
|
|
197
|
+
data: { locator: description, success: true },
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Double click on element
|
|
202
|
+
*/
|
|
203
|
+
async doubleClick(locator, options = {}) {
|
|
204
|
+
const description = this.elementActions.getLocatorDescription(locator);
|
|
205
|
+
this.logger.elementAction("doubleClick", description);
|
|
206
|
+
const element = await this.elementActions.prepareElement(locator, options);
|
|
207
|
+
await element.dblclick({
|
|
208
|
+
position: options.position,
|
|
209
|
+
modifiers: options.modifiers,
|
|
210
|
+
force: options.force,
|
|
211
|
+
timeout: options.timeout ?? this.defaultTimeout,
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Right click on element
|
|
216
|
+
*/
|
|
217
|
+
async rightClick(locator, options = {}) {
|
|
218
|
+
const description = this.elementActions.getLocatorDescription(locator);
|
|
219
|
+
this.logger.elementAction("rightClick", description);
|
|
220
|
+
const element = await this.elementActions.prepareElement(locator, options);
|
|
221
|
+
await element.click({
|
|
222
|
+
button: "right",
|
|
223
|
+
position: options.position,
|
|
224
|
+
modifiers: options.modifiers,
|
|
225
|
+
force: options.force,
|
|
226
|
+
timeout: options.timeout ?? this.defaultTimeout,
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
// ============ Input Actions ============
|
|
230
|
+
/**
|
|
231
|
+
* Type text into element
|
|
232
|
+
*/
|
|
233
|
+
async type(locator, text, options = {}) {
|
|
234
|
+
const description = this.elementActions.getLocatorDescription(locator);
|
|
235
|
+
// Execute before type hooks
|
|
236
|
+
await this.hooks.execute(hook_manager_1.HookEvent.BEFORE_TYPE, {
|
|
237
|
+
platform: types_1.Platform.WEB,
|
|
238
|
+
data: { locator: description, textLength: text.length },
|
|
239
|
+
});
|
|
240
|
+
this.logger.elementAction("type", description);
|
|
241
|
+
const element = await this.elementActions.prepareElement(locator, options);
|
|
242
|
+
// Clear if requested
|
|
243
|
+
if (options.clear) {
|
|
244
|
+
await element.clear();
|
|
245
|
+
}
|
|
246
|
+
await element.pressSequentially(text, {
|
|
247
|
+
delay: options.typeDelay,
|
|
248
|
+
timeout: options.timeout ?? this.defaultTimeout,
|
|
249
|
+
});
|
|
250
|
+
// Execute after type hooks
|
|
251
|
+
await this.hooks.execute(hook_manager_1.HookEvent.AFTER_TYPE, {
|
|
252
|
+
platform: types_1.Platform.WEB,
|
|
253
|
+
data: { locator: description, success: true },
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Fill element with text (faster than type, clears first)
|
|
258
|
+
*/
|
|
259
|
+
async fill(locator, text, options = {}) {
|
|
260
|
+
const description = this.elementActions.getLocatorDescription(locator);
|
|
261
|
+
this.logger.elementAction("fill", description);
|
|
262
|
+
const element = await this.elementActions.prepareElement(locator, options);
|
|
263
|
+
await element.fill(text, {
|
|
264
|
+
force: options.force,
|
|
265
|
+
timeout: options.timeout ?? this.defaultTimeout,
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Clear element text
|
|
270
|
+
*/
|
|
271
|
+
async clear(locator, options = {}) {
|
|
272
|
+
const description = this.elementActions.getLocatorDescription(locator);
|
|
273
|
+
this.logger.elementAction("clear", description);
|
|
274
|
+
const element = await this.elementActions.prepareElement(locator, options);
|
|
275
|
+
await element.clear();
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Press keyboard key
|
|
279
|
+
*/
|
|
280
|
+
async pressKey(key, options) {
|
|
281
|
+
this.logger.debug(`Pressing key: ${key}`);
|
|
282
|
+
await this.page.keyboard.press(key, options);
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Press key on element
|
|
286
|
+
*/
|
|
287
|
+
async press(locator, key, options = {}) {
|
|
288
|
+
const description = this.elementActions.getLocatorDescription(locator);
|
|
289
|
+
this.logger.elementAction(`press ${key}`, description);
|
|
290
|
+
const element = await this.elementActions.prepareElement(locator, options);
|
|
291
|
+
await element.press(key);
|
|
292
|
+
}
|
|
293
|
+
// ============ Selection Actions ============
|
|
294
|
+
/**
|
|
295
|
+
* Select option from dropdown
|
|
296
|
+
*/
|
|
297
|
+
async select(locator, option, options = {}) {
|
|
298
|
+
const description = this.elementActions.getLocatorDescription(locator);
|
|
299
|
+
this.logger.elementAction("select", description);
|
|
300
|
+
const element = await this.elementActions.prepareElement(locator, options);
|
|
301
|
+
const selectOptions = Array.isArray(option) ? option : [option];
|
|
302
|
+
const values = selectOptions.map((opt) => {
|
|
303
|
+
if (opt.value !== undefined)
|
|
304
|
+
return { value: opt.value };
|
|
305
|
+
if (opt.label !== undefined)
|
|
306
|
+
return { label: opt.label };
|
|
307
|
+
if (opt.index !== undefined)
|
|
308
|
+
return { index: opt.index };
|
|
309
|
+
return {};
|
|
310
|
+
});
|
|
311
|
+
await element.selectOption(values);
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Check checkbox
|
|
315
|
+
*/
|
|
316
|
+
async check(locator, options = {}) {
|
|
317
|
+
const description = this.elementActions.getLocatorDescription(locator);
|
|
318
|
+
this.logger.elementAction("check", description);
|
|
319
|
+
const element = await this.elementActions.prepareElement(locator, options);
|
|
320
|
+
await element.check({ force: options.force });
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Uncheck checkbox
|
|
324
|
+
*/
|
|
325
|
+
async uncheck(locator, options = {}) {
|
|
326
|
+
const description = this.elementActions.getLocatorDescription(locator);
|
|
327
|
+
this.logger.elementAction("uncheck", description);
|
|
328
|
+
const element = await this.elementActions.prepareElement(locator, options);
|
|
329
|
+
await element.uncheck({ force: options.force });
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Set checkbox state
|
|
333
|
+
*/
|
|
334
|
+
async setChecked(locator, checked, options = {}) {
|
|
335
|
+
const description = this.elementActions.getLocatorDescription(locator);
|
|
336
|
+
this.logger.elementAction(`setChecked ${checked}`, description);
|
|
337
|
+
const element = await this.elementActions.prepareElement(locator, options);
|
|
338
|
+
await element.setChecked(checked, { force: options.force });
|
|
339
|
+
}
|
|
340
|
+
// ============ Hover and Focus ============
|
|
341
|
+
/**
|
|
342
|
+
* Hover over element
|
|
343
|
+
*/
|
|
344
|
+
async hover(locator, options = {}) {
|
|
345
|
+
const description = this.elementActions.getLocatorDescription(locator);
|
|
346
|
+
this.logger.elementAction("hover", description);
|
|
347
|
+
const element = await this.elementActions.prepareElement(locator, options);
|
|
348
|
+
await element.hover({
|
|
349
|
+
force: options.force,
|
|
350
|
+
timeout: options.timeout ?? this.defaultTimeout,
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Focus on element
|
|
355
|
+
*/
|
|
356
|
+
async focus(locator, options = {}) {
|
|
357
|
+
const description = this.elementActions.getLocatorDescription(locator);
|
|
358
|
+
this.logger.elementAction("focus", description);
|
|
359
|
+
const element = await this.elementActions.prepareElement(locator, options);
|
|
360
|
+
await element.focus();
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* Blur element (remove focus)
|
|
364
|
+
*/
|
|
365
|
+
async blur(locator, options = {}) {
|
|
366
|
+
const description = this.elementActions.getLocatorDescription(locator);
|
|
367
|
+
this.logger.elementAction("blur", description);
|
|
368
|
+
const element = await this.elementActions.prepareElement(locator, options);
|
|
369
|
+
await element.blur();
|
|
370
|
+
}
|
|
371
|
+
// ============ Scroll Actions ============
|
|
372
|
+
/**
|
|
373
|
+
* Scroll element into view
|
|
374
|
+
*/
|
|
375
|
+
async scrollIntoView(locator, options = {}) {
|
|
376
|
+
const description = this.elementActions.getLocatorDescription(locator);
|
|
377
|
+
this.logger.elementAction("scrollIntoView", description);
|
|
378
|
+
const element = await this.elementActions.prepareElement(locator, options);
|
|
379
|
+
await element.scrollIntoViewIfNeeded();
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* Scroll page by amount
|
|
383
|
+
*/
|
|
384
|
+
async scrollBy(x, y) {
|
|
385
|
+
this.logger.debug(`Scrolling by: x=${x}, y=${y}`);
|
|
386
|
+
await this.page.evaluate(({ scrollX, scrollY }) => {
|
|
387
|
+
window.scrollBy(scrollX, scrollY);
|
|
388
|
+
}, { scrollX: x, scrollY: y });
|
|
389
|
+
}
|
|
390
|
+
/**
|
|
391
|
+
* Scroll page to position
|
|
392
|
+
*/
|
|
393
|
+
async scrollTo(x, y) {
|
|
394
|
+
this.logger.debug(`Scrolling to: x=${x}, y=${y}`);
|
|
395
|
+
await this.page.evaluate(({ scrollX, scrollY }) => {
|
|
396
|
+
window.scrollTo(scrollX, scrollY);
|
|
397
|
+
}, { scrollX: x, scrollY: y });
|
|
398
|
+
}
|
|
399
|
+
// ============ Drag and Drop ============
|
|
400
|
+
/**
|
|
401
|
+
* Drag element to target
|
|
402
|
+
*/
|
|
403
|
+
async dragAndDrop(source, target, options = {}) {
|
|
404
|
+
const sourceDesc = this.elementActions.getLocatorDescription(source);
|
|
405
|
+
const targetDesc = this.elementActions.getLocatorDescription(target);
|
|
406
|
+
this.logger.elementAction("dragAndDrop", `${sourceDesc} -> ${targetDesc}`);
|
|
407
|
+
const sourceElement = await this.resolveLocator(source);
|
|
408
|
+
const targetElement = await this.resolveLocator(target);
|
|
409
|
+
await sourceElement.dragTo(targetElement, {
|
|
410
|
+
sourcePosition: options.sourcePosition,
|
|
411
|
+
targetPosition: options.targetPosition,
|
|
412
|
+
});
|
|
413
|
+
}
|
|
414
|
+
// ============ File Upload ============
|
|
415
|
+
/**
|
|
416
|
+
* Upload file(s) to input
|
|
417
|
+
*/
|
|
418
|
+
async uploadFile(locator, files, options = {}) {
|
|
419
|
+
const description = this.elementActions.getLocatorDescription(locator);
|
|
420
|
+
this.logger.elementAction("uploadFile", description);
|
|
421
|
+
const element = await this.elementActions.prepareElement(locator, options);
|
|
422
|
+
await element.setInputFiles(files);
|
|
423
|
+
}
|
|
424
|
+
/**
|
|
425
|
+
* Handle file chooser dialog
|
|
426
|
+
*/
|
|
427
|
+
async handleFileChooser(files) {
|
|
428
|
+
const [fileChooser] = await Promise.all([
|
|
429
|
+
this.page.waitForEvent("filechooser"),
|
|
430
|
+
]);
|
|
431
|
+
await fileChooser.setFiles(files);
|
|
432
|
+
this.logger.debug("Handled file chooser", { files });
|
|
433
|
+
}
|
|
434
|
+
// ============ Element Information ============
|
|
435
|
+
/**
|
|
436
|
+
* Get element text
|
|
437
|
+
*/
|
|
438
|
+
async getText(locator, options) {
|
|
439
|
+
return await this.elementActions.getText(locator, options);
|
|
440
|
+
}
|
|
441
|
+
/**
|
|
442
|
+
* Get element inner text
|
|
443
|
+
*/
|
|
444
|
+
async getInnerText(locator) {
|
|
445
|
+
const element = await this.resolveLocator(locator);
|
|
446
|
+
return await element.innerText();
|
|
447
|
+
}
|
|
448
|
+
/**
|
|
449
|
+
* Get element inner HTML
|
|
450
|
+
*/
|
|
451
|
+
async getInnerHTML(locator) {
|
|
452
|
+
const element = await this.resolveLocator(locator);
|
|
453
|
+
return await element.innerHTML();
|
|
454
|
+
}
|
|
455
|
+
/**
|
|
456
|
+
* Get element attribute
|
|
457
|
+
*/
|
|
458
|
+
async getAttribute(locator, name) {
|
|
459
|
+
return await this.elementActions.getAttribute(locator, name);
|
|
460
|
+
}
|
|
461
|
+
/**
|
|
462
|
+
* Get element input value
|
|
463
|
+
*/
|
|
464
|
+
async getValue(locator) {
|
|
465
|
+
const element = await this.resolveLocator(locator);
|
|
466
|
+
return await element.inputValue();
|
|
467
|
+
}
|
|
468
|
+
/**
|
|
469
|
+
* Get element bounding box
|
|
470
|
+
*/
|
|
471
|
+
async getBoundingBox(locator) {
|
|
472
|
+
return await this.elementActions.getBoundingBox(locator);
|
|
473
|
+
}
|
|
474
|
+
/**
|
|
475
|
+
* Get element state
|
|
476
|
+
*/
|
|
477
|
+
async getElementState(locator) {
|
|
478
|
+
return await this.elementActions.getElementState(locator);
|
|
479
|
+
}
|
|
480
|
+
/**
|
|
481
|
+
* Get all element attributes
|
|
482
|
+
*/
|
|
483
|
+
async getAllAttributes(locator) {
|
|
484
|
+
const element = await this.resolveLocator(locator);
|
|
485
|
+
return await element.evaluate((el) => {
|
|
486
|
+
const attrs = {};
|
|
487
|
+
for (let i = 0; i < el.attributes.length; i++) {
|
|
488
|
+
const attr = el.attributes[i];
|
|
489
|
+
attrs[attr.name] = attr.value;
|
|
490
|
+
}
|
|
491
|
+
return attrs;
|
|
492
|
+
});
|
|
493
|
+
}
|
|
494
|
+
// ============ Frame Handling ============
|
|
495
|
+
/**
|
|
496
|
+
* Get frame locator
|
|
497
|
+
*/
|
|
498
|
+
getFrame(selector) {
|
|
499
|
+
return this.page.frameLocator(selector);
|
|
500
|
+
}
|
|
501
|
+
/**
|
|
502
|
+
* Execute action within frame
|
|
503
|
+
*/
|
|
504
|
+
async inFrame(selector, action) {
|
|
505
|
+
const frame = this.getFrame(selector);
|
|
506
|
+
return await action(frame);
|
|
507
|
+
}
|
|
508
|
+
// ============ Dialog Handling ============
|
|
509
|
+
/**
|
|
510
|
+
* Set up dialog handler
|
|
511
|
+
*/
|
|
512
|
+
onDialog(handler) {
|
|
513
|
+
this.page.on("dialog", async (dialog) => {
|
|
514
|
+
await handler({
|
|
515
|
+
type: dialog.type(),
|
|
516
|
+
message: dialog.message(),
|
|
517
|
+
accept: () => dialog.accept(),
|
|
518
|
+
dismiss: () => dialog.dismiss(),
|
|
519
|
+
defaultValue: dialog.defaultValue(),
|
|
520
|
+
});
|
|
521
|
+
});
|
|
522
|
+
}
|
|
523
|
+
/**
|
|
524
|
+
* Accept next dialog
|
|
525
|
+
*/
|
|
526
|
+
async acceptDialog(promptText) {
|
|
527
|
+
this.page.once("dialog", async (dialog) => {
|
|
528
|
+
await dialog.accept(promptText);
|
|
529
|
+
});
|
|
530
|
+
}
|
|
531
|
+
/**
|
|
532
|
+
* Dismiss next dialog
|
|
533
|
+
*/
|
|
534
|
+
async dismissDialog() {
|
|
535
|
+
this.page.once("dialog", async (dialog) => {
|
|
536
|
+
await dialog.dismiss();
|
|
537
|
+
});
|
|
538
|
+
}
|
|
539
|
+
// ============ Utility Methods ============
|
|
540
|
+
/**
|
|
541
|
+
* Set default timeout
|
|
542
|
+
*/
|
|
543
|
+
setDefaultTimeout(timeout) {
|
|
544
|
+
this.defaultTimeout = timeout;
|
|
545
|
+
this.elementActions.setDefaultTimeout(timeout);
|
|
546
|
+
this.page.setDefaultTimeout(timeout);
|
|
547
|
+
}
|
|
548
|
+
/**
|
|
549
|
+
* Take element screenshot
|
|
550
|
+
*/
|
|
551
|
+
async screenshotElement(locator) {
|
|
552
|
+
const element = await this.resolveLocator(locator);
|
|
553
|
+
return await element.screenshot();
|
|
554
|
+
}
|
|
555
|
+
/**
|
|
556
|
+
* Highlight element (for debugging)
|
|
557
|
+
*/
|
|
558
|
+
async highlight(locator, duration = 2000) {
|
|
559
|
+
const element = await this.resolveLocator(locator);
|
|
560
|
+
await element.evaluate((el, dur) => {
|
|
561
|
+
const originalStyle = el.getAttribute("style") || "";
|
|
562
|
+
el.setAttribute("style", `${originalStyle}; border: 3px solid red !important; background-color: yellow !important;`);
|
|
563
|
+
setTimeout(() => {
|
|
564
|
+
el.setAttribute("style", originalStyle);
|
|
565
|
+
}, dur);
|
|
566
|
+
}, duration);
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
exports.WebPage = WebPage;
|
|
570
|
+
//# sourceMappingURL=web.page.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web.page.js","sourceRoot":"","sources":["../../src/web/web.page.ts"],"names":[],"mappings":"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"}
|