vasu-playwright-utils 0.5.2 → 0.5.3
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/dist/vasu-playwright-lib/utils/element-utils.d.ts +1 -0
- package/dist/vasu-playwright-lib/utils/element-utils.d.ts.map +1 -1
- package/dist/vasu-playwright-lib/utils/element-utils.js +40 -1
- package/dist/vasu-playwright-lib/utils/element-utils.js.map +1 -1
- package/package.json +1 -1
- package/src/vasu-playwright-lib/utils/element-utils.ts +43 -1
|
@@ -97,4 +97,5 @@ export declare function isElementHidden(input: string | Locator, options?: Timeo
|
|
|
97
97
|
* @returns {Promise<boolean>} - True if the Locator is checked, false otherwise.
|
|
98
98
|
*/
|
|
99
99
|
export declare function isElementChecked(input: string | Locator, options?: TimeoutOption): Promise<boolean>;
|
|
100
|
+
export declare function waitForElementToBeStable(input: string | Locator, options?: TimeoutOption): Promise<boolean>;
|
|
100
101
|
//# sourceMappingURL=element-utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"element-utils.d.ts","sourceRoot":"","sources":["../../../src/vasu-playwright-lib/utils/element-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"element-utils.d.ts","sourceRoot":"","sources":["../../../src/vasu-playwright-lib/utils/element-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAOrF;;;;GAIG;AAEH;;;;;GAKG;AACH,wBAAsB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAG/F;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAGjF;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAGrG;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAGhH;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,MAAM,GAAG,OAAO,EACvB,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,CAGxB;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEnE;AAED;;;;GAIG;AACH,wBAAsB,MAAM,CAAC,OAAO,GAAE,iBAAyC,GAAG,OAAO,CAAC,MAAM,CAAC,CAQhG;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAUvG;AAED;;;GAGG;AAEH;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAW1G;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAezG;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAexG;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CASzG;AAED,wBAAsB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAsCjH"}
|
|
@@ -6,12 +6,14 @@
|
|
|
6
6
|
* interacting with elements, making it easier to perform common tasks and checks on web elements.
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.isElementChecked = exports.isElementHidden = exports.isElementVisible = exports.isElementAttached = exports.getLocatorCount = exports.getURL = exports.saveStorageState = exports.getAttribute = exports.getAllInputValues = exports.getInputValue = exports.getAllTexts = exports.getText = void 0;
|
|
9
|
+
exports.waitForElementToBeStable = exports.isElementChecked = exports.isElementHidden = exports.isElementVisible = exports.isElementAttached = exports.getLocatorCount = exports.getURL = exports.saveStorageState = exports.getAttribute = exports.getAllInputValues = exports.getInputValue = exports.getAllTexts = exports.getText = void 0;
|
|
10
10
|
const tslib_1 = require("tslib");
|
|
11
11
|
const page_utils_1 = require("./page-utils");
|
|
12
12
|
const locator_utils_1 = require("./locator-utils");
|
|
13
13
|
const timeouts_1 = require("../constants/timeouts");
|
|
14
14
|
const action_utils_1 = require("./action-utils");
|
|
15
|
+
const setup_1 = require("../setup");
|
|
16
|
+
const test_1 = require("@playwright/test");
|
|
15
17
|
/**
|
|
16
18
|
* 1. Retreiving Data: Use these functions to retrieve text, values, and counts from web elements.
|
|
17
19
|
* These functions can also be used in conditional statements to check the state of web elements.
|
|
@@ -229,4 +231,41 @@ function isElementChecked(input, options) {
|
|
|
229
231
|
});
|
|
230
232
|
}
|
|
231
233
|
exports.isElementChecked = isElementChecked;
|
|
234
|
+
function waitForElementToBeStable(input, options) {
|
|
235
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
236
|
+
let result = false;
|
|
237
|
+
yield test_1.test.step('waitForElementToBeStable', () => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
238
|
+
const locator = (0, locator_utils_1.getLocator)(input);
|
|
239
|
+
const maxWaitTime = (options === null || options === void 0 ? void 0 : options.timeout) || timeouts_1.SMALL_TIMEOUT;
|
|
240
|
+
let stableCounter = 0;
|
|
241
|
+
const initialBoundingBox = yield locator.boundingBox();
|
|
242
|
+
let lastX = (initialBoundingBox === null || initialBoundingBox === void 0 ? void 0 : initialBoundingBox.x) || null;
|
|
243
|
+
let lastY = (initialBoundingBox === null || initialBoundingBox === void 0 ? void 0 : initialBoundingBox.y) || null;
|
|
244
|
+
const startTime = Date.now();
|
|
245
|
+
yield (0, action_utils_1.wait)(200);
|
|
246
|
+
while (Date.now() - startTime < maxWaitTime) {
|
|
247
|
+
const { x, y } = (yield locator.boundingBox()) || { x: null, y: null };
|
|
248
|
+
if (x === lastX && y === lastY) {
|
|
249
|
+
stableCounter++;
|
|
250
|
+
if (stableCounter >= 3) {
|
|
251
|
+
result = true;
|
|
252
|
+
break;
|
|
253
|
+
}
|
|
254
|
+
yield (0, action_utils_1.wait)(100);
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
// stableCounter = 0;
|
|
258
|
+
yield (0, action_utils_1.wait)(200);
|
|
259
|
+
}
|
|
260
|
+
lastX = x;
|
|
261
|
+
lastY = y;
|
|
262
|
+
}
|
|
263
|
+
if (!result) {
|
|
264
|
+
setup_1.logger.error('Max wait time exceeded. Element is not stable.');
|
|
265
|
+
}
|
|
266
|
+
}));
|
|
267
|
+
return result;
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
exports.waitForElementToBeStable = waitForElementToBeStable;
|
|
232
271
|
//# sourceMappingURL=element-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"element-utils.js","sourceRoot":"","sources":["../../../src/vasu-playwright-lib/utils/element-utils.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;AAGH,6CAAuC;AAEvC,mDAA6D;AAC7D,oDAAuE;AACvE,
|
|
1
|
+
{"version":3,"file":"element-utils.js","sourceRoot":"","sources":["../../../src/vasu-playwright-lib/utils/element-utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -10,7 +10,9 @@ import { getPage } from './page-utils';
|
|
|
10
10
|
import { NavigationOptions, TimeoutOption } from '../types/optional-parameter-types';
|
|
11
11
|
import { getAllLocators, getLocator } from './locator-utils';
|
|
12
12
|
import { INSTANT_TIMEOUT, SMALL_TIMEOUT } from '../constants/timeouts';
|
|
13
|
-
import { waitForPageLoadState } from './action-utils';
|
|
13
|
+
import { wait, waitForPageLoadState } from './action-utils';
|
|
14
|
+
import { logger } from '../setup';
|
|
15
|
+
import { test } from '@playwright/test';
|
|
14
16
|
|
|
15
17
|
/**
|
|
16
18
|
* 1. Retreiving Data: Use these functions to retrieve text, values, and counts from web elements.
|
|
@@ -205,3 +207,43 @@ export async function isElementChecked(input: string | Locator, options?: Timeou
|
|
|
205
207
|
}
|
|
206
208
|
return false;
|
|
207
209
|
}
|
|
210
|
+
|
|
211
|
+
export async function waitForElementToBeStable(input: string | Locator, options?: TimeoutOption): Promise<boolean> {
|
|
212
|
+
let result = false;
|
|
213
|
+
await test.step('waitForElementToBeStable', async () => {
|
|
214
|
+
const locator = getLocator(input);
|
|
215
|
+
const maxWaitTime = options?.timeout || SMALL_TIMEOUT;
|
|
216
|
+
let stableCounter = 0;
|
|
217
|
+
|
|
218
|
+
const initialBoundingBox = await locator.boundingBox();
|
|
219
|
+
let lastX: number | null = initialBoundingBox?.x || null;
|
|
220
|
+
let lastY: number | null = initialBoundingBox?.y || null;
|
|
221
|
+
|
|
222
|
+
const startTime = Date.now();
|
|
223
|
+
await wait(200);
|
|
224
|
+
|
|
225
|
+
while (Date.now() - startTime < maxWaitTime) {
|
|
226
|
+
const { x, y } = (await locator.boundingBox()) || { x: null, y: null };
|
|
227
|
+
|
|
228
|
+
if (x === lastX && y === lastY) {
|
|
229
|
+
stableCounter++;
|
|
230
|
+
if (stableCounter >= 3) {
|
|
231
|
+
result = true;
|
|
232
|
+
break;
|
|
233
|
+
}
|
|
234
|
+
await wait(100);
|
|
235
|
+
} else {
|
|
236
|
+
// stableCounter = 0;
|
|
237
|
+
await wait(200);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
lastX = x;
|
|
241
|
+
lastY = y;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
if (!result) {
|
|
245
|
+
logger.error('Max wait time exceeded. Element is not stable.');
|
|
246
|
+
}
|
|
247
|
+
});
|
|
248
|
+
return result;
|
|
249
|
+
}
|