@testmuai/playwright-bindings 0.1.1
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 +51 -0
- package/dist/capability.d.ts +60 -0
- package/dist/capability.d.ts.map +1 -0
- package/dist/capability.js +212 -0
- package/dist/capability.js.map +1 -0
- package/dist/config.d.ts +12 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +16 -0
- package/dist/config.js.map +1 -0
- package/dist/configure.d.ts +30 -0
- package/dist/configure.d.ts.map +1 -0
- package/dist/configure.js +53 -0
- package/dist/configure.js.map +1 -0
- package/dist/errors.d.ts +4 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +7 -0
- package/dist/errors.js.map +1 -0
- package/dist/healPatch.d.ts +11 -0
- package/dist/healPatch.d.ts.map +1 -0
- package/dist/healPatch.js +82 -0
- package/dist/healPatch.js.map +1 -0
- package/dist/helpers/assertion.d.ts +23 -0
- package/dist/helpers/assertion.d.ts.map +1 -0
- package/dist/helpers/assertion.js +87 -0
- package/dist/helpers/assertion.js.map +1 -0
- package/dist/helpers/drag.d.ts +3 -0
- package/dist/helpers/drag.d.ts.map +1 -0
- package/dist/helpers/drag.js +7 -0
- package/dist/helpers/drag.js.map +1 -0
- package/dist/helpers/executeApi.d.ts +34 -0
- package/dist/helpers/executeApi.d.ts.map +1 -0
- package/dist/helpers/executeApi.js +83 -0
- package/dist/helpers/executeApi.js.map +1 -0
- package/dist/helpers/executeDb.d.ts +9 -0
- package/dist/helpers/executeDb.d.ts.map +1 -0
- package/dist/helpers/executeDb.js +23 -0
- package/dist/helpers/executeDb.js.map +1 -0
- package/dist/helpers/executeJs.d.ts +16 -0
- package/dist/helpers/executeJs.d.ts.map +1 -0
- package/dist/helpers/executeJs.js +58 -0
- package/dist/helpers/executeJs.js.map +1 -0
- package/dist/helpers/kaneCli.d.ts +2 -0
- package/dist/helpers/kaneCli.d.ts.map +1 -0
- package/dist/helpers/kaneCli.js +5 -0
- package/dist/helpers/kaneCli.js.map +1 -0
- package/dist/helpers/math.d.ts +6 -0
- package/dist/helpers/math.d.ts.map +1 -0
- package/dist/helpers/math.js +70 -0
- package/dist/helpers/math.js.map +1 -0
- package/dist/helpers/network.d.ts +23 -0
- package/dist/helpers/network.d.ts.map +1 -0
- package/dist/helpers/network.js +67 -0
- package/dist/helpers/network.js.map +1 -0
- package/dist/helpers/smartui.d.ts +3 -0
- package/dist/helpers/smartui.d.ts.map +1 -0
- package/dist/helpers/smartui.js +11 -0
- package/dist/helpers/smartui.js.map +1 -0
- package/dist/helpers/tabs.d.ts +3 -0
- package/dist/helpers/tabs.d.ts.map +1 -0
- package/dist/helpers/tabs.js +13 -0
- package/dist/helpers/tabs.js.map +1 -0
- package/dist/helpers/vision.d.ts +48 -0
- package/dist/helpers/vision.d.ts.map +1 -0
- package/dist/helpers/vision.js +169 -0
- package/dist/helpers/vision.js.map +1 -0
- package/dist/helpers/wait.d.ts +3 -0
- package/dist/helpers/wait.d.ts.map +1 -0
- package/dist/helpers/wait.js +21 -0
- package/dist/helpers/wait.js.map +1 -0
- package/dist/http.d.ts +12 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +29 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +56 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +34 -0
- package/dist/index.js.map +1 -0
- package/dist/log.d.ts +22 -0
- package/dist/log.d.ts.map +1 -0
- package/dist/log.js +43 -0
- package/dist/log.js.map +1 -0
- package/dist/reporters/index.d.ts +10 -0
- package/dist/reporters/index.d.ts.map +1 -0
- package/dist/reporters/index.js +7 -0
- package/dist/reporters/index.js.map +1 -0
- package/dist/reporters/local.d.ts +11 -0
- package/dist/reporters/local.d.ts.map +1 -0
- package/dist/reporters/local.js +29 -0
- package/dist/reporters/local.js.map +1 -0
- package/dist/reporters/lt.d.ts +15 -0
- package/dist/reporters/lt.d.ts.map +1 -0
- package/dist/reporters/lt.js +48 -0
- package/dist/reporters/lt.js.map +1 -0
- package/dist/reporters/null.d.ts +10 -0
- package/dist/reporters/null.d.ts.map +1 -0
- package/dist/reporters/null.js +9 -0
- package/dist/reporters/null.js.map +1 -0
- package/dist/session.d.ts +2 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +61 -0
- package/dist/session.js.map +1 -0
- package/dist/step.d.ts +14 -0
- package/dist/step.d.ts.map +1 -0
- package/dist/step.js +36 -0
- package/dist/step.js.map +1 -0
- package/dist/test.d.ts +10 -0
- package/dist/test.d.ts.map +1 -0
- package/dist/test.js +5 -0
- package/dist/test.js.map +1 -0
- package/dist/testConfig.d.ts +11 -0
- package/dist/testConfig.d.ts.map +1 -0
- package/dist/testConfig.js +82 -0
- package/dist/testConfig.js.map +1 -0
- package/dist/vars.d.ts +61 -0
- package/dist/vars.d.ts.map +1 -0
- package/dist/vars.js +656 -0
- package/dist/vars.js.map +1 -0
- package/package.json +63 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
The MIT License (MIT)
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 TestMu AI
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
|
13
|
+
all copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
21
|
+
THE SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# @testmuai/playwright-bindings
|
|
2
|
+
|
|
3
|
+
Thin runtime for testmu-style Playwright tests in TypeScript/JavaScript. Companion to [`testmuai-playwright-bindings`](../playwright-python/) (Python).
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @testmuai/playwright-bindings playwright
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
import testmu, { v, setVar } from "@testmuai/playwright-bindings";
|
|
15
|
+
import { expect } from "@playwright/test";
|
|
16
|
+
|
|
17
|
+
testmu.configure({
|
|
18
|
+
build: "build-123",
|
|
19
|
+
name: "Login Test",
|
|
20
|
+
variables: { email: "user@test.com" },
|
|
21
|
+
testParams: { BASE_URL: "https://example.com" },
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
testmu.test("Login flow", async (page) => {
|
|
25
|
+
testmu.step("Navigate");
|
|
26
|
+
await page.goto(v("${BASE_URL}"));
|
|
27
|
+
testmu.done();
|
|
28
|
+
|
|
29
|
+
testmu.step("Fill credentials");
|
|
30
|
+
await page.locator("#email").fill(v("{{email}}"));
|
|
31
|
+
testmu.done();
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
testmu.run();
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Env vars
|
|
38
|
+
|
|
39
|
+
| Var | Purpose |
|
|
40
|
+
| ------------------------------ | ---------------------------------------------------------------- |
|
|
41
|
+
| `TESTMU_RUN_TARGET` | `local` (default) or `cloud` |
|
|
42
|
+
| `LT_USERNAME`, `LT_ACCESS_KEY` | LambdaTest credentials (enables ATMS + vision) |
|
|
43
|
+
| `TESTMU_SMART` | `1` enables vision/heal (validated at run() — requires LT creds) |
|
|
44
|
+
|
|
45
|
+
## Build
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
npm run build # tsc → dist/
|
|
49
|
+
npm test # vitest run
|
|
50
|
+
npm run typecheck # tsc --noEmit
|
|
51
|
+
```
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
export interface ChromeOption {
|
|
2
|
+
key: string;
|
|
3
|
+
value?: string;
|
|
4
|
+
type?: 'file' | 'no-args' | string;
|
|
5
|
+
}
|
|
6
|
+
export interface LTOptions {
|
|
7
|
+
platform: string;
|
|
8
|
+
user: string | undefined;
|
|
9
|
+
accessKey: string | undefined;
|
|
10
|
+
video: boolean;
|
|
11
|
+
resolution: string;
|
|
12
|
+
network: boolean;
|
|
13
|
+
'network.full.har': boolean;
|
|
14
|
+
build: string;
|
|
15
|
+
project: string;
|
|
16
|
+
name: string;
|
|
17
|
+
w3c: true;
|
|
18
|
+
plugin: string;
|
|
19
|
+
visual: boolean;
|
|
20
|
+
console: boolean;
|
|
21
|
+
'tms.tc_id': string;
|
|
22
|
+
loadExtensions: (string | undefined)[];
|
|
23
|
+
playwrightClientVersion: string;
|
|
24
|
+
tunnel: boolean;
|
|
25
|
+
performance: boolean;
|
|
26
|
+
dedicatedProxy: boolean;
|
|
27
|
+
idleTimeout: number;
|
|
28
|
+
accessibility: boolean;
|
|
29
|
+
hideInternalCommandLogs: true;
|
|
30
|
+
dependentTestsInScenario: boolean;
|
|
31
|
+
timezone?: string;
|
|
32
|
+
geoLocation?: string;
|
|
33
|
+
customHeaders?: Record<string, string>;
|
|
34
|
+
'goog:chromeOptions'?: string[];
|
|
35
|
+
'ms:edgeOptions'?: string[];
|
|
36
|
+
firefoxUserPrefs?: Record<string, unknown>;
|
|
37
|
+
}
|
|
38
|
+
export interface Capabilities {
|
|
39
|
+
browserName: string;
|
|
40
|
+
browserVersion: string;
|
|
41
|
+
'LT:Options': LTOptions;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Build and return the LambdaTest capabilities dict.
|
|
45
|
+
* Async because testConfig resolution is async.
|
|
46
|
+
*/
|
|
47
|
+
export declare function buildCapabilities(): Promise<Capabilities>;
|
|
48
|
+
/**
|
|
49
|
+
* Build the LambdaTest CDP WebSocket URL from a capabilities dict.
|
|
50
|
+
* Credentials live inside LT:Options — no user/accessKey URL params.
|
|
51
|
+
*/
|
|
52
|
+
export declare function getCdpUrl(caps: Capabilities): string;
|
|
53
|
+
/**
|
|
54
|
+
* Parse a resolution string like '1920x1080' into a viewport dict.
|
|
55
|
+
*/
|
|
56
|
+
export declare function getViewport(resolution?: string): {
|
|
57
|
+
width: number;
|
|
58
|
+
height: number;
|
|
59
|
+
};
|
|
60
|
+
//# sourceMappingURL=capability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability.d.ts","sourceRoot":"","sources":["../src/capability.ts"],"names":[],"mappings":"AA6BA,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,IAAI,CAAC;IACV,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC;IACvC,uBAAuB,EAAE,MAAM,CAAC;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,uBAAuB,EAAE,IAAI,CAAC;IAC9B,wBAAwB,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,SAAS,CAAC;CACzB;AAwBD;;;GAGG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,YAAY,CAAC,CA6J/D;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAKpD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAKlF"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LambdaTest capability builder for Playwright TypeScript.
|
|
3
|
+
*
|
|
4
|
+
* Fallback chain: configure() > HE testConfig > env vars > defaults.
|
|
5
|
+
* Sets smart_os / smart_browser_name / etc. env vars as side-effect
|
|
6
|
+
* so that vars.ts {{smart.os_type}} / {{smart.browser_name}} resolve.
|
|
7
|
+
*
|
|
8
|
+
* Full Python parity with testmu/_capability.py::get_capabilities().
|
|
9
|
+
* Intentional deviation: plugin = "node-node" (Python uses "python-python").
|
|
10
|
+
*/
|
|
11
|
+
import { createRequire } from 'node:module';
|
|
12
|
+
import { get, wasSet } from './configure.js';
|
|
13
|
+
import { getCapValue, loadTestConfig } from './testConfig.js';
|
|
14
|
+
// ESM-safe require for reading playwright/package.json at runtime
|
|
15
|
+
const _require = createRequire(import.meta.url);
|
|
16
|
+
function getPwVersion() {
|
|
17
|
+
try {
|
|
18
|
+
return _require('playwright/package.json').version;
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return 'unknown';
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
// Internal helpers
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
function getDownloadsFolder() {
|
|
28
|
+
if (process.platform === 'win32') {
|
|
29
|
+
return `${process.env['USERPROFILE'] ?? ''}\\Downloads`;
|
|
30
|
+
}
|
|
31
|
+
return `${process.env['HOME'] ?? '~'}/Downloads`;
|
|
32
|
+
}
|
|
33
|
+
async function boolHe(key, def) {
|
|
34
|
+
const v = await getCapValue(key, undefined);
|
|
35
|
+
if (v === undefined || v === null)
|
|
36
|
+
return def;
|
|
37
|
+
if (typeof v === 'boolean')
|
|
38
|
+
return v;
|
|
39
|
+
return ['1', 'true', 'yes'].includes(String(v).toLowerCase());
|
|
40
|
+
}
|
|
41
|
+
// ---------------------------------------------------------------------------
|
|
42
|
+
// Public API
|
|
43
|
+
// ---------------------------------------------------------------------------
|
|
44
|
+
/**
|
|
45
|
+
* Build and return the LambdaTest capabilities dict.
|
|
46
|
+
* Async because testConfig resolution is async.
|
|
47
|
+
*/
|
|
48
|
+
export async function buildCapabilities() {
|
|
49
|
+
// Top-level fields: configure() not in scope for these, so env > default
|
|
50
|
+
const browserName = process.env['LT_BROWSER'] ?? 'Chrome';
|
|
51
|
+
const browserVersion = process.env['LT_BROWSER_VERSION'] ?? 'latest';
|
|
52
|
+
const resolution = process.env['LT_RESOLUTION'] ?? '1920x1080';
|
|
53
|
+
const platform = process.env['LT_PLATFORM'] ?? 'linux';
|
|
54
|
+
const user = process.env['LT_USERNAME'];
|
|
55
|
+
const accessKey = process.env['LT_ACCESS_KEY'];
|
|
56
|
+
// build + name + tc_id: configure() > HE testConfig > env > default
|
|
57
|
+
const build = String((wasSet('build') ? get('build') : '') ||
|
|
58
|
+
(await getCapValue('BUILD', process.env['BUILD'] ?? '')));
|
|
59
|
+
const name = String((wasSet('name') ? get('name') : '') ||
|
|
60
|
+
(await getCapValue('TEST_NAME', process.env['TEST_NAME'] ?? '')));
|
|
61
|
+
const tcId = String((wasSet('tcId') ? get('tcId') : '') ||
|
|
62
|
+
(process.env['LT_TC_ID'] ?? ''));
|
|
63
|
+
// network: configure() wins when explicitly set, else HE testConfig > env > false
|
|
64
|
+
const network = wasSet('network')
|
|
65
|
+
? Boolean(get('network'))
|
|
66
|
+
: await boolHe('NETWORK', false);
|
|
67
|
+
// multipleProfiles: configure() wins when explicitly set, else false
|
|
68
|
+
const multipleProfiles = wasSet('multipleProfiles')
|
|
69
|
+
? Boolean(get('multipleProfiles'))
|
|
70
|
+
: false;
|
|
71
|
+
// Bool caps: configure() has no explicit setters → HE testConfig > env > default
|
|
72
|
+
const video = await boolHe('VIDEO', true);
|
|
73
|
+
const visual = await boolHe('VISUAL', true);
|
|
74
|
+
const consoleLog = await boolHe('CONSOLE', true);
|
|
75
|
+
const tunnel = await boolHe('TUNNEL', false);
|
|
76
|
+
const performance = await boolHe('PERFORMANCE', false);
|
|
77
|
+
const dedicatedProxy = await boolHe('DEDICATED_PROXY', false);
|
|
78
|
+
const accessibility = await boolHe('ACCESSIBILITY', false);
|
|
79
|
+
const idleTimeout = Number((await getCapValue('IDLE_TIMEOUT', process.env['IDLE_TIMEOUT'] ?? '1800')) ?? '1800');
|
|
80
|
+
const caps = {
|
|
81
|
+
browserName,
|
|
82
|
+
browserVersion,
|
|
83
|
+
'LT:Options': {
|
|
84
|
+
platform,
|
|
85
|
+
user,
|
|
86
|
+
accessKey,
|
|
87
|
+
video,
|
|
88
|
+
resolution,
|
|
89
|
+
network,
|
|
90
|
+
'network.full.har': network,
|
|
91
|
+
build,
|
|
92
|
+
project: 'Auteur-Code-Export',
|
|
93
|
+
name,
|
|
94
|
+
w3c: true,
|
|
95
|
+
plugin: 'node-node', // intentional deviation: Python uses "python-python"
|
|
96
|
+
visual,
|
|
97
|
+
console: consoleLog,
|
|
98
|
+
'tms.tc_id': tcId,
|
|
99
|
+
loadExtensions: [process.env['EXTENSION']],
|
|
100
|
+
playwrightClientVersion: getPwVersion(),
|
|
101
|
+
tunnel,
|
|
102
|
+
performance,
|
|
103
|
+
dedicatedProxy,
|
|
104
|
+
idleTimeout,
|
|
105
|
+
accessibility,
|
|
106
|
+
hideInternalCommandLogs: true,
|
|
107
|
+
dependentTestsInScenario: multipleProfiles,
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
// Geolocation — conditional (only set if env var present)
|
|
111
|
+
if (process.env['GEO_LOCATION']) {
|
|
112
|
+
caps['LT:Options'].geoLocation = process.env['GEO_LOCATION'];
|
|
113
|
+
}
|
|
114
|
+
// Timezone — configure() > testConfig.timezone.region > env var
|
|
115
|
+
let tz = wasSet('timezone') ? String(get('timezone')) : '';
|
|
116
|
+
if (!tz) {
|
|
117
|
+
const tc = await loadTestConfig();
|
|
118
|
+
if (tc) {
|
|
119
|
+
const tzVal = tc['timezone'];
|
|
120
|
+
if (tzVal && typeof tzVal === 'object' && 'region' in tzVal) {
|
|
121
|
+
const region = tzVal.region;
|
|
122
|
+
if (region)
|
|
123
|
+
tz = region;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
if (!tz)
|
|
128
|
+
tz = process.env['TIMEZONE'] ?? '';
|
|
129
|
+
if (tz)
|
|
130
|
+
caps['LT:Options'].timezone = tz;
|
|
131
|
+
// Custom headers — conditional
|
|
132
|
+
const hdrs = get('customHeaders');
|
|
133
|
+
if (Object.keys(hdrs).length > 0) {
|
|
134
|
+
caps['LT:Options'].customHeaders = hdrs;
|
|
135
|
+
}
|
|
136
|
+
// Browser-specific options
|
|
137
|
+
const bLow = browserName.toLowerCase();
|
|
138
|
+
if (bLow === 'chrome' || bLow === 'pw-chromium') {
|
|
139
|
+
const defaultArgs = [
|
|
140
|
+
'--enable-logging',
|
|
141
|
+
'--disable-notifications',
|
|
142
|
+
'--no-sandbox',
|
|
143
|
+
'--log-level=0',
|
|
144
|
+
'--ignore-certificate-errors',
|
|
145
|
+
'--disable-blink-features=AutomationControlled',
|
|
146
|
+
'--password-store=basic',
|
|
147
|
+
'--safebrowsing-disable-auto-update',
|
|
148
|
+
'--disable-sync',
|
|
149
|
+
];
|
|
150
|
+
caps['LT:Options']['goog:chromeOptions'] = [...defaultArgs];
|
|
151
|
+
const chromeOpts = get('chromeOptions');
|
|
152
|
+
for (const op of chromeOpts) {
|
|
153
|
+
const k = op.key ?? '';
|
|
154
|
+
const t = op.type ?? '';
|
|
155
|
+
const val = op.value ?? '';
|
|
156
|
+
if (t === 'no-args') {
|
|
157
|
+
caps['LT:Options']['goog:chromeOptions'].push(k);
|
|
158
|
+
}
|
|
159
|
+
else if (t === 'file') {
|
|
160
|
+
const filePath = `${getDownloadsFolder()}/${val}`;
|
|
161
|
+
caps['LT:Options']['goog:chromeOptions'].push(`${k}=${filePath}`);
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
caps['LT:Options']['goog:chromeOptions'].push(`${k}=${val}`);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
else if (bLow === 'microsoftedge') {
|
|
169
|
+
caps['LT:Options']['ms:edgeOptions'] = [
|
|
170
|
+
'--enable-logging',
|
|
171
|
+
'--disable-notifications',
|
|
172
|
+
'--log-level=0',
|
|
173
|
+
'--disable-blink-features=AutomationControlled',
|
|
174
|
+
'--password-store=basic',
|
|
175
|
+
'--safebrowsing-disable-auto-update',
|
|
176
|
+
'--disable-sync',
|
|
177
|
+
];
|
|
178
|
+
}
|
|
179
|
+
else if (bLow === 'firefox' || bLow === 'pw-firefox') {
|
|
180
|
+
caps['LT:Options'].firefoxUserPrefs = {
|
|
181
|
+
'dom.webnotifications.enabled': false,
|
|
182
|
+
'signon.rememberSignons': false,
|
|
183
|
+
'signon.autofillForms': false,
|
|
184
|
+
'permissions.default.desktop-notification': 2,
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
// Side-effect: set smart_* env vars (same as Python template)
|
|
188
|
+
process.env['smart_os'] = caps['LT:Options'].platform;
|
|
189
|
+
process.env['smart_os_version'] = 'latest';
|
|
190
|
+
process.env['smart_browser_name'] = caps.browserName;
|
|
191
|
+
process.env['smart_browser_version'] = caps.browserVersion;
|
|
192
|
+
return caps;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Build the LambdaTest CDP WebSocket URL from a capabilities dict.
|
|
196
|
+
* Credentials live inside LT:Options — no user/accessKey URL params.
|
|
197
|
+
*/
|
|
198
|
+
export function getCdpUrl(caps) {
|
|
199
|
+
return ('wss://cdp.lambdatest.com/playwright?capabilities=' +
|
|
200
|
+
encodeURIComponent(JSON.stringify(caps)));
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Parse a resolution string like '1920x1080' into a viewport dict.
|
|
204
|
+
*/
|
|
205
|
+
export function getViewport(resolution) {
|
|
206
|
+
const res = resolution ?? process.env['LT_RESOLUTION'] ?? '1920x1080';
|
|
207
|
+
const m = res.toLowerCase().match(/^(\d+)x(\d+)$/);
|
|
208
|
+
if (!m)
|
|
209
|
+
return { width: 1920, height: 1080 };
|
|
210
|
+
return { width: Number(m[1]), height: Number(m[2]) };
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=capability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability.js","sourceRoot":"","sources":["../src/capability.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type RunTarget = 'local' | 'cloud';
|
|
2
|
+
export interface Config {
|
|
3
|
+
runTarget: RunTarget;
|
|
4
|
+
ltAuth: boolean;
|
|
5
|
+
smart: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare function readConfig(): Config;
|
|
8
|
+
export declare const config: {
|
|
9
|
+
readonly current: Config;
|
|
10
|
+
};
|
|
11
|
+
export declare function _refresh(): void;
|
|
12
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AAE1C,MAAM,WAAW,MAAM;IACrB,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,wBAAgB,UAAU,IAAI,MAAM,CAOnC;AAGD,eAAO,MAAM,MAAM,EAAE;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAI9C,CAAC;AACF,wBAAgB,QAAQ,IAAI,IAAI,CAE/B"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export function readConfig() {
|
|
2
|
+
const runTarget = process.env['TESTMU_RUN_TARGET'] === 'cloud' ? 'cloud' : 'local';
|
|
3
|
+
const ltAuth = Boolean(process.env['LT_USERNAME']) && Boolean(process.env['LT_ACCESS_KEY']);
|
|
4
|
+
const smart = process.env['TESTMU_SMART'] === '1';
|
|
5
|
+
return { runTarget, ltAuth, smart };
|
|
6
|
+
}
|
|
7
|
+
let _snapshot = readConfig();
|
|
8
|
+
export const config = {
|
|
9
|
+
get current() {
|
|
10
|
+
return _snapshot;
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
export function _refresh() {
|
|
14
|
+
_snapshot = readConfig();
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,UAAU;IACxB,MAAM,SAAS,GACb,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IACnE,MAAM,MAAM,GACV,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;IAC/E,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,GAAG,CAAC;IAClD,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AACtC,CAAC;AAED,IAAI,SAAS,GAAW,UAAU,EAAE,CAAC;AACrC,MAAM,CAAC,MAAM,MAAM,GAAiC;IAClD,IAAI,OAAO;QACT,OAAO,SAAS,CAAC;IACnB,CAAC;CACF,CAAC;AACF,MAAM,UAAU,QAAQ;IACtB,SAAS,GAAG,UAAU,EAAE,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export interface GlobalVariable {
|
|
2
|
+
name: string;
|
|
3
|
+
value: string;
|
|
4
|
+
is_persist: boolean;
|
|
5
|
+
session_value?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface ConfigureOptions {
|
|
8
|
+
build?: string;
|
|
9
|
+
name?: string;
|
|
10
|
+
tcId?: string;
|
|
11
|
+
network?: boolean;
|
|
12
|
+
timezone?: string;
|
|
13
|
+
chromeOptions?: string[];
|
|
14
|
+
customHeaders?: Record<string, string>;
|
|
15
|
+
multipleProfiles?: boolean;
|
|
16
|
+
variables?: Record<string, unknown>;
|
|
17
|
+
testParams?: Record<string, unknown>;
|
|
18
|
+
globalVariables?: GlobalVariable[];
|
|
19
|
+
uploadedFiles?: string[];
|
|
20
|
+
}
|
|
21
|
+
declare const DEFAULTS: Required<ConfigureOptions>;
|
|
22
|
+
type ConfigKey = keyof typeof DEFAULTS;
|
|
23
|
+
type ConfigureHook = (opts: ConfigureOptions) => void;
|
|
24
|
+
export declare function _registerConfigureHook(hook: ConfigureHook): void;
|
|
25
|
+
export declare function configure(opts: ConfigureOptions): void;
|
|
26
|
+
export declare function get<K extends ConfigKey>(key: K): (typeof DEFAULTS)[K];
|
|
27
|
+
export declare function wasSet(key: ConfigKey): boolean;
|
|
28
|
+
export declare function _reset(): void;
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=configure.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configure.d.ts","sourceRoot":"","sources":["../src/configure.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IACnC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,QAAA,MAAM,QAAQ,EAAE,QAAQ,CAAC,gBAAgB,CAaxC,CAAC;AAEF,KAAK,SAAS,GAAG,MAAM,OAAO,QAAQ,CAAC;AAKvC,KAAK,aAAa,GAAG,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAAC;AAGtD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAEhE;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAUtD;AAED,wBAAgB,GAAG,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAErE;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAE9C;AAED,wBAAgB,MAAM,IAAI,IAAI,CAU7B"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
const DEFAULTS = {
|
|
2
|
+
build: '',
|
|
3
|
+
name: '',
|
|
4
|
+
tcId: '',
|
|
5
|
+
network: false,
|
|
6
|
+
timezone: '',
|
|
7
|
+
chromeOptions: [],
|
|
8
|
+
customHeaders: {},
|
|
9
|
+
multipleProfiles: false,
|
|
10
|
+
variables: {},
|
|
11
|
+
testParams: {},
|
|
12
|
+
globalVariables: [],
|
|
13
|
+
uploadedFiles: [],
|
|
14
|
+
};
|
|
15
|
+
const data = { ...DEFAULTS };
|
|
16
|
+
const setKeys = new Set();
|
|
17
|
+
const hooks = [];
|
|
18
|
+
export function _registerConfigureHook(hook) {
|
|
19
|
+
hooks.push(hook);
|
|
20
|
+
}
|
|
21
|
+
export function configure(opts) {
|
|
22
|
+
for (const key of Object.keys(opts)) {
|
|
23
|
+
if (!(key in DEFAULTS)) {
|
|
24
|
+
console.warn(`testmu.configure: unknown key '${key}', ignoring`);
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
data[key] = opts[key];
|
|
28
|
+
setKeys.add(key);
|
|
29
|
+
}
|
|
30
|
+
for (const hook of hooks)
|
|
31
|
+
hook(opts);
|
|
32
|
+
}
|
|
33
|
+
export function get(key) {
|
|
34
|
+
return data[key];
|
|
35
|
+
}
|
|
36
|
+
export function wasSet(key) {
|
|
37
|
+
return setKeys.has(key);
|
|
38
|
+
}
|
|
39
|
+
export function _reset() {
|
|
40
|
+
for (const key of Object.keys(DEFAULTS)) {
|
|
41
|
+
const def = DEFAULTS[key];
|
|
42
|
+
if (Array.isArray(def))
|
|
43
|
+
data[key] = [];
|
|
44
|
+
else if (typeof def === 'object' && def !== null)
|
|
45
|
+
data[key] = {};
|
|
46
|
+
else
|
|
47
|
+
data[key] = def;
|
|
48
|
+
}
|
|
49
|
+
setKeys.clear();
|
|
50
|
+
// NOTE: hooks are NOT cleared — they are registered once at module load and are stable
|
|
51
|
+
// for the process lifetime. Clearing them would break configure→vars wiring after _reset().
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=configure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configure.js","sourceRoot":"","sources":["../src/configure.ts"],"names":[],"mappings":"AAsBA,MAAM,QAAQ,GAA+B;IAC3C,KAAK,EAAE,EAAE;IACT,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAE;IACR,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,EAAE;IACZ,aAAa,EAAE,EAAE;IACjB,aAAa,EAAE,EAAE;IACjB,gBAAgB,EAAE,KAAK;IACvB,SAAS,EAAE,EAAE;IACb,UAAU,EAAE,EAAE;IACd,eAAe,EAAE,EAAE;IACnB,aAAa,EAAE,EAAE;CAClB,CAAC;AAIF,MAAM,IAAI,GAA+B,EAAE,GAAG,QAAQ,EAAE,CAAC;AACzD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAa,CAAC;AAGrC,MAAM,KAAK,GAAoB,EAAE,CAAC;AAElC,MAAM,UAAU,sBAAsB,CAAC,IAAmB;IACxD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAsB;IAC9C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAgB,EAAE,CAAC;QACnD,IAAI,CAAC,CAAC,GAAG,IAAI,QAAQ,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,kCAAkC,GAAG,aAAa,CAAC,CAAC;YACjE,SAAS;QACX,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,GAAG,CAAsB,GAAM;IAC7C,OAAO,IAAI,CAAC,GAAG,CAAyB,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,GAAc;IACnC,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,MAAM;IACpB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAgB,EAAE,CAAC;QACvD,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;YAAG,IAAmC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;aAClE,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;YAAG,IAAmC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;;YAC3F,IAAmC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IACvD,CAAC;IACD,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,uFAAuF;IACvF,4FAA4F;AAC9F,CAAC"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,OAAO,EAAE,MAAM;CAI5B"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Install heal wrappers on Locator.prototype.
|
|
3
|
+
* Idempotent: safe to call multiple times; the second call is a no-op.
|
|
4
|
+
*/
|
|
5
|
+
export declare function installHealPatch(): void;
|
|
6
|
+
/**
|
|
7
|
+
* Restore Locator.prototype to its original state.
|
|
8
|
+
* Used by tests to prevent patch leakage across test files.
|
|
9
|
+
*/
|
|
10
|
+
export declare function _uninstallHealPatch(): void;
|
|
11
|
+
//# sourceMappingURL=healPatch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"healPatch.d.ts","sourceRoot":"","sources":["../src/healPatch.ts"],"names":[],"mappings":"AAqEA;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAYvC;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAO1C"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { currentStep } from './step.js';
|
|
2
|
+
import { config } from './config.js';
|
|
3
|
+
import { getVisionCoordinates } from './helpers/vision.js';
|
|
4
|
+
const HEAL_METHODS = [
|
|
5
|
+
'click', 'dblclick', 'fill', 'type', 'press',
|
|
6
|
+
'hover', 'check', 'uncheck', 'selectOption',
|
|
7
|
+
'setInputFiles', 'scrollIntoViewIfNeeded', 'focus', 'tap',
|
|
8
|
+
];
|
|
9
|
+
const COORD_METHODS = new Set(['click', 'dblclick', 'hover']);
|
|
10
|
+
const originals = new Map();
|
|
11
|
+
let installed = false;
|
|
12
|
+
function wrap(name, original) {
|
|
13
|
+
return async function wrapped(...args) {
|
|
14
|
+
const stepInfo = currentStep();
|
|
15
|
+
// Outside a step or smart mode off — pure passthrough, no overhead.
|
|
16
|
+
if (!stepInfo || !config.current.smart)
|
|
17
|
+
return original.apply(this, args);
|
|
18
|
+
try {
|
|
19
|
+
return await original.apply(this, args);
|
|
20
|
+
}
|
|
21
|
+
catch (e) {
|
|
22
|
+
const err = e;
|
|
23
|
+
if (err?.name === 'TimeoutError' &&
|
|
24
|
+
(await this.count()) === 0 &&
|
|
25
|
+
COORD_METHODS.has(name)) {
|
|
26
|
+
// Element is genuinely absent — try vision-coordinate heal.
|
|
27
|
+
// getVisionCoordinates may throw (Python 13d9f6b: no silent fallback
|
|
28
|
+
// when smart is ON); on any vision failure, re-throw the original
|
|
29
|
+
// TimeoutError so the test surfaces the real problem.
|
|
30
|
+
try {
|
|
31
|
+
const page = this.page();
|
|
32
|
+
const coords = await getVisionCoordinates(page, stepInfo.description, name);
|
|
33
|
+
if (coords) {
|
|
34
|
+
if (name === 'hover')
|
|
35
|
+
return page.mouse.move(coords.x, coords.y);
|
|
36
|
+
// click and dblclick exist on page.mouse under the same name.
|
|
37
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
38
|
+
return page.mouse[name](coords.x, coords.y);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// Vision heal failed — surface original TimeoutError below.
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// Heal not applicable or heal failed — surface original error.
|
|
46
|
+
throw e;
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Install heal wrappers on Locator.prototype.
|
|
52
|
+
* Idempotent: safe to call multiple times; the second call is a no-op.
|
|
53
|
+
*/
|
|
54
|
+
export function installHealPatch() {
|
|
55
|
+
if (installed)
|
|
56
|
+
return;
|
|
57
|
+
// @ts-ignore — Locator is an interface in TS but a concrete class at runtime.
|
|
58
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
59
|
+
const proto = Locator.prototype;
|
|
60
|
+
for (const name of HEAL_METHODS) {
|
|
61
|
+
const orig = proto[name];
|
|
62
|
+
if (typeof orig !== 'function')
|
|
63
|
+
continue;
|
|
64
|
+
originals.set(name, orig);
|
|
65
|
+
proto[name] = wrap(name, orig);
|
|
66
|
+
}
|
|
67
|
+
installed = true;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Restore Locator.prototype to its original state.
|
|
71
|
+
* Used by tests to prevent patch leakage across test files.
|
|
72
|
+
*/
|
|
73
|
+
export function _uninstallHealPatch() {
|
|
74
|
+
// @ts-ignore — Locator is an interface in TS but a concrete class at runtime.
|
|
75
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
76
|
+
const proto = Locator.prototype;
|
|
77
|
+
for (const [name, orig] of originals)
|
|
78
|
+
proto[name] = orig;
|
|
79
|
+
originals.clear();
|
|
80
|
+
installed = false;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=healPatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"healPatch.js","sourceRoot":"","sources":["../src/healPatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { Page } from 'playwright';
|
|
2
|
+
export interface SubCheck {
|
|
3
|
+
store_key?: string;
|
|
4
|
+
operator: string;
|
|
5
|
+
expected_value?: unknown;
|
|
6
|
+
expected?: unknown;
|
|
7
|
+
extracted_value?: unknown;
|
|
8
|
+
description?: string;
|
|
9
|
+
transforms?: string[];
|
|
10
|
+
}
|
|
11
|
+
export interface AssertionTree {
|
|
12
|
+
composite_operator: 'and' | 'or';
|
|
13
|
+
sub_checks: SubCheck[];
|
|
14
|
+
claim?: string;
|
|
15
|
+
verification?: unknown;
|
|
16
|
+
}
|
|
17
|
+
export interface AssertionResult {
|
|
18
|
+
status: 'passed' | 'failed';
|
|
19
|
+
sub_results?: unknown[];
|
|
20
|
+
}
|
|
21
|
+
export declare function verifyAssertion(page: Page, claim: string, tree: AssertionTree): Promise<AssertionResult>;
|
|
22
|
+
export declare function evaluateBranch(subChecks: SubCheck[], compositeOperator?: 'and' | 'or'): Promise<boolean>;
|
|
23
|
+
//# sourceMappingURL=assertion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assertion.d.ts","sourceRoot":"","sources":["../../src/helpers/assertion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAQvC,MAAM,WAAW,QAAQ;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,kBAAkB,EAAE,KAAK,GAAG,IAAI,CAAC;IACjC,UAAU,EAAE,QAAQ,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC5B,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC;CACzB;AAkCD,wBAAsB,eAAe,CACnC,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,eAAe,CAAC,CA+C1B;AAED,wBAAsB,cAAc,CAClC,SAAS,EAAE,QAAQ,EAAE,EACrB,iBAAiB,GAAE,KAAK,GAAG,IAAY,GACtC,OAAO,CAAC,OAAO,CAAC,CAWlB"}
|