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,119 @@
|
|
|
1
|
+
import { Locator, ActionOptions, WaitOptions, ElementInfo, ElementState, BoundingBox } from "../types";
|
|
2
|
+
import { Logger, WaitUtils } from "../utils";
|
|
3
|
+
/**
|
|
4
|
+
* Locator resolver function type
|
|
5
|
+
* Platform-specific implementations will provide this
|
|
6
|
+
*/
|
|
7
|
+
export type LocatorResolver<T> = (locator: Locator | string) => Promise<T>;
|
|
8
|
+
/**
|
|
9
|
+
* Element checker function type
|
|
10
|
+
*/
|
|
11
|
+
export type ElementChecker<T> = {
|
|
12
|
+
isVisible: (element: T) => Promise<boolean>;
|
|
13
|
+
isEnabled: (element: T) => Promise<boolean>;
|
|
14
|
+
isSelected: (element: T) => Promise<boolean>;
|
|
15
|
+
getText: (element: T) => Promise<string>;
|
|
16
|
+
getAttribute: (element: T, name: string) => Promise<string | null>;
|
|
17
|
+
getBoundingBox: (element: T) => Promise<BoundingBox | null>;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Common element actions that can be used across platforms.
|
|
21
|
+
* This class provides reusable logic for element interactions.
|
|
22
|
+
*/
|
|
23
|
+
export declare class ElementActions<TElement> {
|
|
24
|
+
protected logger: Logger;
|
|
25
|
+
protected waitUtils: WaitUtils;
|
|
26
|
+
protected resolver: LocatorResolver<TElement>;
|
|
27
|
+
protected checker: ElementChecker<TElement>;
|
|
28
|
+
protected defaultTimeout: number;
|
|
29
|
+
constructor(resolver: LocatorResolver<TElement>, checker: ElementChecker<TElement>, logger?: Logger, defaultTimeout?: number);
|
|
30
|
+
/**
|
|
31
|
+
* Parse locator from string or Locator object
|
|
32
|
+
*/
|
|
33
|
+
parseLocator(locator: Locator | string): Locator;
|
|
34
|
+
/**
|
|
35
|
+
* Get locator description for logging
|
|
36
|
+
*/
|
|
37
|
+
getLocatorDescription(locator: Locator | string): string;
|
|
38
|
+
/**
|
|
39
|
+
* Find element with wait
|
|
40
|
+
*/
|
|
41
|
+
findElement(locator: Locator | string, options?: WaitOptions): Promise<TElement>;
|
|
42
|
+
/**
|
|
43
|
+
* Wait for element to be visible
|
|
44
|
+
*/
|
|
45
|
+
waitForVisible(locator: Locator | string, options?: WaitOptions): Promise<TElement>;
|
|
46
|
+
/**
|
|
47
|
+
* Wait for element to be enabled
|
|
48
|
+
*/
|
|
49
|
+
waitForEnabled(locator: Locator | string, options?: WaitOptions): Promise<TElement>;
|
|
50
|
+
/**
|
|
51
|
+
* Wait for element to be clickable (visible and enabled)
|
|
52
|
+
*/
|
|
53
|
+
waitForClickable(locator: Locator | string, options?: WaitOptions): Promise<TElement>;
|
|
54
|
+
/**
|
|
55
|
+
* Wait for element to not be visible
|
|
56
|
+
*/
|
|
57
|
+
waitForNotVisible(locator: Locator | string, options?: WaitOptions): Promise<void>;
|
|
58
|
+
/**
|
|
59
|
+
* Wait for element to have specific text
|
|
60
|
+
*/
|
|
61
|
+
waitForText(locator: Locator | string, expectedText: string, options?: WaitOptions): Promise<TElement>;
|
|
62
|
+
/**
|
|
63
|
+
* Wait for element to contain text
|
|
64
|
+
*/
|
|
65
|
+
waitForTextContains(locator: Locator | string, expectedText: string, options?: WaitOptions): Promise<TElement>;
|
|
66
|
+
/**
|
|
67
|
+
* Wait for element attribute value
|
|
68
|
+
*/
|
|
69
|
+
waitForAttribute(locator: Locator | string, attribute: string, expectedValue: string, options?: WaitOptions): Promise<TElement>;
|
|
70
|
+
/**
|
|
71
|
+
* Get element state
|
|
72
|
+
*/
|
|
73
|
+
getElementState(locator: Locator | string): Promise<ElementState>;
|
|
74
|
+
/**
|
|
75
|
+
* Get element info
|
|
76
|
+
*/
|
|
77
|
+
getElementInfo(locator: Locator | string): Promise<Partial<ElementInfo>>;
|
|
78
|
+
/**
|
|
79
|
+
* Check if element exists
|
|
80
|
+
*/
|
|
81
|
+
exists(locator: Locator | string, timeout?: number): Promise<boolean>;
|
|
82
|
+
/**
|
|
83
|
+
* Check if element is visible
|
|
84
|
+
*/
|
|
85
|
+
isVisible(locator: Locator | string): Promise<boolean>;
|
|
86
|
+
/**
|
|
87
|
+
* Check if element is enabled
|
|
88
|
+
*/
|
|
89
|
+
isEnabled(locator: Locator | string): Promise<boolean>;
|
|
90
|
+
/**
|
|
91
|
+
* Check if element is selected/checked
|
|
92
|
+
*/
|
|
93
|
+
isSelected(locator: Locator | string): Promise<boolean>;
|
|
94
|
+
/**
|
|
95
|
+
* Get element text
|
|
96
|
+
*/
|
|
97
|
+
getText(locator: Locator | string, options?: ActionOptions): Promise<string>;
|
|
98
|
+
/**
|
|
99
|
+
* Get element attribute
|
|
100
|
+
*/
|
|
101
|
+
getAttribute(locator: Locator | string, attribute: string): Promise<string | null>;
|
|
102
|
+
/**
|
|
103
|
+
* Get element bounding box
|
|
104
|
+
*/
|
|
105
|
+
getBoundingBox(locator: Locator | string): Promise<BoundingBox | null>;
|
|
106
|
+
/**
|
|
107
|
+
* Prepare element for action (find, wait for visibility/enabled)
|
|
108
|
+
*/
|
|
109
|
+
prepareElement(locator: Locator | string, options?: ActionOptions): Promise<TElement>;
|
|
110
|
+
/**
|
|
111
|
+
* Set default timeout
|
|
112
|
+
*/
|
|
113
|
+
setDefaultTimeout(timeout: number): void;
|
|
114
|
+
/**
|
|
115
|
+
* Get default timeout
|
|
116
|
+
*/
|
|
117
|
+
getDefaultTimeout(): number;
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=element.actions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element.actions.d.ts","sourceRoot":"","sources":["../../src/core/element.actions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,379 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ElementActions = void 0;
|
|
4
|
+
const utils_1 = require("../utils");
|
|
5
|
+
/**
|
|
6
|
+
* Default action options
|
|
7
|
+
*/
|
|
8
|
+
const DEFAULT_ACTION_OPTIONS = {
|
|
9
|
+
timeout: 30000,
|
|
10
|
+
force: false,
|
|
11
|
+
waitForVisible: true,
|
|
12
|
+
waitForEnabled: true,
|
|
13
|
+
delay: 0,
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Common element actions that can be used across platforms.
|
|
17
|
+
* This class provides reusable logic for element interactions.
|
|
18
|
+
*/
|
|
19
|
+
class ElementActions {
|
|
20
|
+
logger;
|
|
21
|
+
waitUtils;
|
|
22
|
+
resolver;
|
|
23
|
+
checker;
|
|
24
|
+
defaultTimeout;
|
|
25
|
+
constructor(resolver, checker, logger, defaultTimeout = 30000) {
|
|
26
|
+
this.resolver = resolver;
|
|
27
|
+
this.checker = checker;
|
|
28
|
+
this.logger = logger || utils_1.Logger.getInstance();
|
|
29
|
+
this.waitUtils = new utils_1.WaitUtils(this.logger);
|
|
30
|
+
this.defaultTimeout = defaultTimeout;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Parse locator from string or Locator object
|
|
34
|
+
*/
|
|
35
|
+
parseLocator(locator) {
|
|
36
|
+
if (typeof locator === "string") {
|
|
37
|
+
// Auto-detect locator type
|
|
38
|
+
if (locator.startsWith("//") || locator.startsWith("(//")) {
|
|
39
|
+
return { strategy: "xpath", value: locator };
|
|
40
|
+
}
|
|
41
|
+
if (locator.startsWith("#")) {
|
|
42
|
+
return { strategy: "id", value: locator.substring(1) };
|
|
43
|
+
}
|
|
44
|
+
if (locator.startsWith(".")) {
|
|
45
|
+
return { strategy: "class", value: locator.substring(1) };
|
|
46
|
+
}
|
|
47
|
+
if (locator.startsWith("~")) {
|
|
48
|
+
return { strategy: "accessibility", value: locator.substring(1) };
|
|
49
|
+
}
|
|
50
|
+
if (locator.startsWith("text=")) {
|
|
51
|
+
return { strategy: "text", value: locator.substring(5) };
|
|
52
|
+
}
|
|
53
|
+
if (locator.startsWith("[name=")) {
|
|
54
|
+
const match = locator.match(/\[name=["']?([^"'\]]+)["']?\]/);
|
|
55
|
+
if (match) {
|
|
56
|
+
return { strategy: "name", value: match[1] };
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// Default to CSS selector
|
|
60
|
+
return { strategy: "css", value: locator };
|
|
61
|
+
}
|
|
62
|
+
return locator;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Get locator description for logging
|
|
66
|
+
*/
|
|
67
|
+
getLocatorDescription(locator) {
|
|
68
|
+
const parsed = this.parseLocator(locator);
|
|
69
|
+
return parsed.description || `${parsed.strategy}=${parsed.value}`;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Find element with wait
|
|
73
|
+
*/
|
|
74
|
+
async findElement(locator, options = {}) {
|
|
75
|
+
const timeout = options.timeout ?? this.defaultTimeout;
|
|
76
|
+
const description = this.getLocatorDescription(locator);
|
|
77
|
+
this.logger.debug(`Finding element: ${description}`);
|
|
78
|
+
try {
|
|
79
|
+
const element = await this.waitUtils.waitFor(async () => {
|
|
80
|
+
try {
|
|
81
|
+
return await this.resolver(locator);
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
}, {
|
|
87
|
+
timeout,
|
|
88
|
+
interval: 100,
|
|
89
|
+
message: `Element not found: ${description}`,
|
|
90
|
+
});
|
|
91
|
+
if (!element) {
|
|
92
|
+
throw new utils_1.ElementNotFoundError(description, timeout);
|
|
93
|
+
}
|
|
94
|
+
return element;
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
if (error instanceof utils_1.ElementNotFoundError) {
|
|
98
|
+
throw error;
|
|
99
|
+
}
|
|
100
|
+
throw new utils_1.ElementNotFoundError(description, timeout, {
|
|
101
|
+
originalError: error.message,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Wait for element to be visible
|
|
107
|
+
*/
|
|
108
|
+
async waitForVisible(locator, options = {}) {
|
|
109
|
+
const timeout = options.timeout ?? this.defaultTimeout;
|
|
110
|
+
const description = this.getLocatorDescription(locator);
|
|
111
|
+
this.logger.debug(`Waiting for element to be visible: ${description}`);
|
|
112
|
+
const element = await this.findElement(locator, options);
|
|
113
|
+
await this.waitUtils.waitFor(async () => this.checker.isVisible(element), {
|
|
114
|
+
timeout,
|
|
115
|
+
interval: 100,
|
|
116
|
+
message: `Element not visible: ${description}`,
|
|
117
|
+
});
|
|
118
|
+
return element;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Wait for element to be enabled
|
|
122
|
+
*/
|
|
123
|
+
async waitForEnabled(locator, options = {}) {
|
|
124
|
+
const timeout = options.timeout ?? this.defaultTimeout;
|
|
125
|
+
const description = this.getLocatorDescription(locator);
|
|
126
|
+
this.logger.debug(`Waiting for element to be enabled: ${description}`);
|
|
127
|
+
const element = await this.findElement(locator, options);
|
|
128
|
+
await this.waitUtils.waitFor(async () => this.checker.isEnabled(element), {
|
|
129
|
+
timeout,
|
|
130
|
+
interval: 100,
|
|
131
|
+
message: `Element not enabled: ${description}`,
|
|
132
|
+
});
|
|
133
|
+
return element;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Wait for element to be clickable (visible and enabled)
|
|
137
|
+
*/
|
|
138
|
+
async waitForClickable(locator, options = {}) {
|
|
139
|
+
const timeout = options.timeout ?? this.defaultTimeout;
|
|
140
|
+
const description = this.getLocatorDescription(locator);
|
|
141
|
+
this.logger.debug(`Waiting for element to be clickable: ${description}`);
|
|
142
|
+
const element = await this.findElement(locator, options);
|
|
143
|
+
await this.waitUtils.waitFor(async () => {
|
|
144
|
+
const visible = await this.checker.isVisible(element);
|
|
145
|
+
const enabled = await this.checker.isEnabled(element);
|
|
146
|
+
return visible && enabled;
|
|
147
|
+
}, {
|
|
148
|
+
timeout,
|
|
149
|
+
interval: 100,
|
|
150
|
+
message: `Element not clickable: ${description}`,
|
|
151
|
+
});
|
|
152
|
+
return element;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Wait for element to not be visible
|
|
156
|
+
*/
|
|
157
|
+
async waitForNotVisible(locator, options = {}) {
|
|
158
|
+
const timeout = options.timeout ?? this.defaultTimeout;
|
|
159
|
+
const description = this.getLocatorDescription(locator);
|
|
160
|
+
this.logger.debug(`Waiting for element to not be visible: ${description}`);
|
|
161
|
+
await this.waitUtils.waitFor(async () => {
|
|
162
|
+
try {
|
|
163
|
+
const element = await this.resolver(locator);
|
|
164
|
+
return !(await this.checker.isVisible(element));
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
return true; // Element not found = not visible
|
|
168
|
+
}
|
|
169
|
+
}, {
|
|
170
|
+
timeout,
|
|
171
|
+
interval: 100,
|
|
172
|
+
message: `Element still visible: ${description}`,
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Wait for element to have specific text
|
|
177
|
+
*/
|
|
178
|
+
async waitForText(locator, expectedText, options = {}) {
|
|
179
|
+
const timeout = options.timeout ?? this.defaultTimeout;
|
|
180
|
+
const description = this.getLocatorDescription(locator);
|
|
181
|
+
this.logger.debug(`Waiting for element text: ${description} = "${expectedText}"`);
|
|
182
|
+
const element = await this.findElement(locator, options);
|
|
183
|
+
await this.waitUtils.waitFor(async () => {
|
|
184
|
+
const text = await this.checker.getText(element);
|
|
185
|
+
return text === expectedText;
|
|
186
|
+
}, {
|
|
187
|
+
timeout,
|
|
188
|
+
interval: 100,
|
|
189
|
+
message: `Element text did not match. Expected: "${expectedText}"`,
|
|
190
|
+
});
|
|
191
|
+
return element;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Wait for element to contain text
|
|
195
|
+
*/
|
|
196
|
+
async waitForTextContains(locator, expectedText, options = {}) {
|
|
197
|
+
const timeout = options.timeout ?? this.defaultTimeout;
|
|
198
|
+
const description = this.getLocatorDescription(locator);
|
|
199
|
+
this.logger.debug(`Waiting for element to contain text: ${description} contains "${expectedText}"`);
|
|
200
|
+
const element = await this.findElement(locator, options);
|
|
201
|
+
await this.waitUtils.waitFor(async () => {
|
|
202
|
+
const text = await this.checker.getText(element);
|
|
203
|
+
return text.includes(expectedText);
|
|
204
|
+
}, {
|
|
205
|
+
timeout,
|
|
206
|
+
interval: 100,
|
|
207
|
+
message: `Element text did not contain: "${expectedText}"`,
|
|
208
|
+
});
|
|
209
|
+
return element;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Wait for element attribute value
|
|
213
|
+
*/
|
|
214
|
+
async waitForAttribute(locator, attribute, expectedValue, options = {}) {
|
|
215
|
+
const timeout = options.timeout ?? this.defaultTimeout;
|
|
216
|
+
const description = this.getLocatorDescription(locator);
|
|
217
|
+
this.logger.debug(`Waiting for attribute: ${description}[${attribute}] = "${expectedValue}"`);
|
|
218
|
+
const element = await this.findElement(locator, options);
|
|
219
|
+
await this.waitUtils.waitFor(async () => {
|
|
220
|
+
const value = await this.checker.getAttribute(element, attribute);
|
|
221
|
+
return value === expectedValue;
|
|
222
|
+
}, {
|
|
223
|
+
timeout,
|
|
224
|
+
interval: 100,
|
|
225
|
+
message: `Attribute ${attribute} did not match. Expected: "${expectedValue}"`,
|
|
226
|
+
});
|
|
227
|
+
return element;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Get element state
|
|
231
|
+
*/
|
|
232
|
+
async getElementState(locator) {
|
|
233
|
+
const element = await this.findElement(locator);
|
|
234
|
+
const [isVisible, isEnabled, isSelected] = await Promise.all([
|
|
235
|
+
this.checker.isVisible(element),
|
|
236
|
+
this.checker.isEnabled(element),
|
|
237
|
+
this.checker.isSelected(element).catch(() => false),
|
|
238
|
+
]);
|
|
239
|
+
return {
|
|
240
|
+
isVisible,
|
|
241
|
+
isEnabled,
|
|
242
|
+
isSelected,
|
|
243
|
+
isFocused: false, // Platform-specific
|
|
244
|
+
isEditable: isEnabled, // Simplified
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Get element info
|
|
249
|
+
*/
|
|
250
|
+
async getElementInfo(locator) {
|
|
251
|
+
const element = await this.findElement(locator);
|
|
252
|
+
const [text, boundingBox, state] = await Promise.all([
|
|
253
|
+
this.checker.getText(element),
|
|
254
|
+
this.checker.getBoundingBox(element),
|
|
255
|
+
this.getElementState(locator),
|
|
256
|
+
]);
|
|
257
|
+
return {
|
|
258
|
+
text,
|
|
259
|
+
boundingBox,
|
|
260
|
+
state,
|
|
261
|
+
attributes: {}, // Platform-specific
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Check if element exists
|
|
266
|
+
*/
|
|
267
|
+
async exists(locator, timeout = 1000) {
|
|
268
|
+
try {
|
|
269
|
+
await this.findElement(locator, { timeout });
|
|
270
|
+
return true;
|
|
271
|
+
}
|
|
272
|
+
catch {
|
|
273
|
+
return false;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Check if element is visible
|
|
278
|
+
*/
|
|
279
|
+
async isVisible(locator) {
|
|
280
|
+
try {
|
|
281
|
+
const element = await this.resolver(locator);
|
|
282
|
+
return await this.checker.isVisible(element);
|
|
283
|
+
}
|
|
284
|
+
catch {
|
|
285
|
+
return false;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Check if element is enabled
|
|
290
|
+
*/
|
|
291
|
+
async isEnabled(locator) {
|
|
292
|
+
try {
|
|
293
|
+
const element = await this.resolver(locator);
|
|
294
|
+
return await this.checker.isEnabled(element);
|
|
295
|
+
}
|
|
296
|
+
catch {
|
|
297
|
+
return false;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Check if element is selected/checked
|
|
302
|
+
*/
|
|
303
|
+
async isSelected(locator) {
|
|
304
|
+
try {
|
|
305
|
+
const element = await this.resolver(locator);
|
|
306
|
+
return await this.checker.isSelected(element);
|
|
307
|
+
}
|
|
308
|
+
catch {
|
|
309
|
+
return false;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Get element text
|
|
314
|
+
*/
|
|
315
|
+
async getText(locator, options = {}) {
|
|
316
|
+
const element = await this.prepareElement(locator, options);
|
|
317
|
+
return await this.checker.getText(element);
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Get element attribute
|
|
321
|
+
*/
|
|
322
|
+
async getAttribute(locator, attribute) {
|
|
323
|
+
const element = await this.findElement(locator);
|
|
324
|
+
return await this.checker.getAttribute(element, attribute);
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Get element bounding box
|
|
328
|
+
*/
|
|
329
|
+
async getBoundingBox(locator) {
|
|
330
|
+
const element = await this.findElement(locator);
|
|
331
|
+
return await this.checker.getBoundingBox(element);
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* Prepare element for action (find, wait for visibility/enabled)
|
|
335
|
+
*/
|
|
336
|
+
async prepareElement(locator, options = {}) {
|
|
337
|
+
const opts = { ...DEFAULT_ACTION_OPTIONS, ...options };
|
|
338
|
+
const description = this.getLocatorDescription(locator);
|
|
339
|
+
// Add delay if specified
|
|
340
|
+
if (opts.delay > 0) {
|
|
341
|
+
await this.waitUtils.sleep(opts.delay);
|
|
342
|
+
}
|
|
343
|
+
// Find element
|
|
344
|
+
const element = await this.findElement(locator, { timeout: opts.timeout });
|
|
345
|
+
// Skip visibility/enabled checks if force is true
|
|
346
|
+
if (opts.force) {
|
|
347
|
+
return element;
|
|
348
|
+
}
|
|
349
|
+
// Wait for visibility
|
|
350
|
+
if (opts.waitForVisible) {
|
|
351
|
+
const visible = await this.checker.isVisible(element);
|
|
352
|
+
if (!visible) {
|
|
353
|
+
throw new utils_1.ElementNotInteractableError(description, "interaction", "Element is not visible");
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
// Wait for enabled
|
|
357
|
+
if (opts.waitForEnabled) {
|
|
358
|
+
const enabled = await this.checker.isEnabled(element);
|
|
359
|
+
if (!enabled) {
|
|
360
|
+
throw new utils_1.ElementNotInteractableError(description, "interaction", "Element is not enabled");
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
return element;
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Set default timeout
|
|
367
|
+
*/
|
|
368
|
+
setDefaultTimeout(timeout) {
|
|
369
|
+
this.defaultTimeout = timeout;
|
|
370
|
+
}
|
|
371
|
+
/**
|
|
372
|
+
* Get default timeout
|
|
373
|
+
*/
|
|
374
|
+
getDefaultTimeout() {
|
|
375
|
+
return this.defaultTimeout;
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
exports.ElementActions = ElementActions;
|
|
379
|
+
//# sourceMappingURL=element.actions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element.actions.js","sourceRoot":"","sources":["../../src/core/element.actions.ts"],"names":[],"mappings":"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"}
|