visionclaw 0.1.195-dev.feat-e2e-test-system.1 → 0.1.195-dev.feat-e2e-test-system.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/e2e/suites/browser.d.ts.map +1 -1
- package/dist/e2e/suites/browser.js +34 -30
- package/dist/e2e/suites/browser.js.map +1 -1
- package/dist/e2e/suites/cua.d.ts.map +1 -1
- package/dist/e2e/suites/cua.js +30 -26
- package/dist/e2e/suites/cua.js.map +1 -1
- package/dist-agent/bundle.cjs +64 -58
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../src/e2e/suites/browser.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C,eAAO,MAAM,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../src/e2e/suites/browser.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C,eAAO,MAAM,YAAY,EAAE,QAqD1B,CAAC"}
|
|
@@ -16,37 +16,41 @@ export const browserSuite = {
|
|
|
16
16
|
await ensureBrowser();
|
|
17
17
|
return ok("Browser ensured");
|
|
18
18
|
}));
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
tests.push(await runTest("browser", "browser.screenshot", "Screenshot", async () => {
|
|
33
|
-
const browser = await chromium.connectOverCDP(getCdpEndpoint());
|
|
34
|
-
const page = browser.contexts()[0].pages().at(0);
|
|
35
|
-
if (page === undefined)
|
|
36
|
-
return skipped("No Playwright page available");
|
|
37
|
-
const screenshotPath = path.join(context.artifactsDir, "browser-screenshot.png");
|
|
38
|
-
await page.screenshot({ path: screenshotPath });
|
|
39
|
-
if (!fs.existsSync(screenshotPath))
|
|
40
|
-
throw new Error("Screenshot not saved");
|
|
41
|
-
return ok("Screenshot captured", { screenshotPath });
|
|
42
|
-
}));
|
|
43
|
-
if (context.mode === "full") {
|
|
44
|
-
tests.push(await runTest("browser", "browser.network", "Network capture", async () => {
|
|
45
|
-
const resp = await fetch(`${localServer.baseUrl}/api/echo?runId=${context.runId}`);
|
|
46
|
-
if (!resp.ok)
|
|
47
|
-
throw new Error(`Echo endpoint failed: ${resp.status}`);
|
|
48
|
-
return ok("Network request succeeded");
|
|
19
|
+
const browser = await chromium.connectOverCDP(getCdpEndpoint());
|
|
20
|
+
try {
|
|
21
|
+
tests.push(await runTest("browser", "browser.local_page", "Local page interaction", async () => {
|
|
22
|
+
const contextObj = browser.contexts()[0] ?? await browser.newContext();
|
|
23
|
+
const page = contextObj.pages()[0] ?? await contextObj.newPage();
|
|
24
|
+
await page.goto(`${localServer.baseUrl}/e2e/browser?runId=${context.runId}`);
|
|
25
|
+
await page.fill("#text-input", `VisionClaw E2E ${context.runId}`);
|
|
26
|
+
await page.click("#click-button");
|
|
27
|
+
await page.check("#checkbox");
|
|
28
|
+
const result = await page.locator("#result").textContent();
|
|
29
|
+
if (result !== "checked")
|
|
30
|
+
throw new Error(`Unexpected result: ${result ?? "null"}`);
|
|
31
|
+
return ok("Local page interactions succeeded");
|
|
49
32
|
}));
|
|
33
|
+
tests.push(await runTest("browser", "browser.screenshot", "Screenshot", async () => {
|
|
34
|
+
const page = browser.contexts()[0].pages().at(0);
|
|
35
|
+
if (page === undefined)
|
|
36
|
+
return skipped("No Playwright page available");
|
|
37
|
+
const screenshotPath = path.join(context.artifactsDir, "browser-screenshot.png");
|
|
38
|
+
await page.screenshot({ path: screenshotPath });
|
|
39
|
+
if (!fs.existsSync(screenshotPath))
|
|
40
|
+
throw new Error("Screenshot not saved");
|
|
41
|
+
return ok("Screenshot captured", { screenshotPath });
|
|
42
|
+
}));
|
|
43
|
+
if (context.mode === "full") {
|
|
44
|
+
tests.push(await runTest("browser", "browser.network", "Network capture", async () => {
|
|
45
|
+
const resp = await fetch(`${localServer.baseUrl}/api/echo?runId=${context.runId}`);
|
|
46
|
+
if (!resp.ok)
|
|
47
|
+
throw new Error(`Echo endpoint failed: ${resp.status}`);
|
|
48
|
+
return ok("Network request succeeded");
|
|
49
|
+
}));
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
finally {
|
|
53
|
+
await browser.close();
|
|
50
54
|
}
|
|
51
55
|
}
|
|
52
56
|
finally {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../src/e2e/suites/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,EAAE,gBAAgB,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE3E,MAAM,CAAC,MAAM,YAAY,GAAa;IACpC,EAAE,EAAE,SAAS;IACb,IAAI,EAAE,SAAS;IACf,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,MAAM,WAAW,GAAG,MAAM,oBAAoB,EAAE,CAAC;QACjD,MAAM,KAAK,GAAG,EAAE,CAAC;QAEjB,IAAI,CAAC;YACH,KAAK,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,SAAS,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,KAAK,IAAI,EAAE;gBACzF,MAAM,aAAa,EAAE,CAAC;gBACtB,OAAO,EAAE,CAAC,iBAAiB,CAAC,CAAC;YAC/B,CAAC,CAAC,CAAC,CAAC;YAEJ,
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../src/e2e/suites/browser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cua.d.ts","sourceRoot":"","sources":["../../../src/e2e/suites/cua.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C,eAAO,MAAM,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"cua.d.ts","sourceRoot":"","sources":["../../../src/e2e/suites/cua.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C,eAAO,MAAM,QAAQ,EAAE,QA8DtB,CAAC"}
|
package/dist/e2e/suites/cua.js
CHANGED
|
@@ -32,32 +32,36 @@ export const cuaSuite = {
|
|
|
32
32
|
fs.writeFileSync(screenshotPath, Buffer.from(shot.base64, "base64"));
|
|
33
33
|
return ok("Screenshot captured", { screenshotPath });
|
|
34
34
|
}));
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
35
|
+
await ensureBrowser();
|
|
36
|
+
const browser = await chromium.connectOverCDP(getCdpEndpoint());
|
|
37
|
+
try {
|
|
38
|
+
tests.push(await runTest("cua", "cua.open_local_page", "Open local page", async () => {
|
|
39
|
+
const contextObj = browser.contexts()[0] ?? await browser.newContext();
|
|
40
|
+
const page = contextObj.pages()[0] ?? await contextObj.newPage();
|
|
41
|
+
await page.goto(`${localServer.baseUrl}/e2e/cua?runId=${context.runId}`);
|
|
42
|
+
return ok("Local CUA page opened");
|
|
43
|
+
}));
|
|
44
|
+
tests.push(await runTest("cua", "cua.click_and_type", "Click and type", async () => {
|
|
45
|
+
if (!isDisplaySizeInitialized()) {
|
|
46
|
+
return skipped("Display size not initialized; grant Accessibility and Screen Recording permissions");
|
|
47
|
+
}
|
|
48
|
+
const page = browser.contexts()[0]?.pages().find((p) => p.url().includes("/e2e/cua"));
|
|
49
|
+
if (!page)
|
|
50
|
+
return skipped("CUA test page not open");
|
|
51
|
+
const box = await page.locator("#text-input").boundingBox();
|
|
52
|
+
if (!box)
|
|
53
|
+
return warning("Could not resolve input bounding box");
|
|
54
|
+
await click(Math.round(box.x + box.width / 2), Math.round(box.y + box.height / 2));
|
|
55
|
+
await typeText(`VisionClaw E2E ${context.runId}`);
|
|
56
|
+
const value = await page.inputValue("#text-input");
|
|
57
|
+
if (!value.includes(context.runId))
|
|
58
|
+
throw new Error("Typed value not reflected in page");
|
|
59
|
+
return ok("CUA click/type verified via Playwright");
|
|
60
|
+
}));
|
|
61
|
+
}
|
|
62
|
+
finally {
|
|
63
|
+
await browser.close();
|
|
64
|
+
}
|
|
61
65
|
}
|
|
62
66
|
finally {
|
|
63
67
|
await localServer.close();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cua.js","sourceRoot":"","sources":["../../../src/e2e/suites/cua.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,EACL,aAAa,EACb,KAAK,EACL,eAAe,EACf,wBAAwB,EACxB,QAAQ,GACT,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,EAAE,gBAAgB,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEpF,MAAM,CAAC,MAAM,QAAQ,GAAa;IAChC,EAAE,EAAE,KAAK;IACT,IAAI,EAAE,KAAK;IACX,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,MAAM,WAAW,GAAG,MAAM,oBAAoB,EAAE,CAAC;QACjD,MAAM,KAAK,GAAG,EAAE,CAAC;QAEjB,IAAI,CAAC;YACH,KAAK,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,KAAK,IAAI,EAAE;gBAC7E,IAAI,CAAC,wBAAwB,EAAE,EAAE,CAAC;oBAChC,IAAI,CAAC;wBACH,MAAM,eAAe,EAAE,CAAC;oBAC1B,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,OAAO,OAAO,CAAC,6BAA6B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAClG,CAAC;gBACH,CAAC;gBACD,OAAO,EAAE,CAAC,oBAAoB,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC,CAAC;YAEJ,KAAK,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,KAAK,IAAI,EAAE;gBACzE,MAAM,IAAI,GAAG,MAAM,aAAa,EAAE,CAAC;gBACnC,IAAI,CAAC,IAAI,CAAC,MAAM;oBAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;gBACtD,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAAC;gBAC7E,EAAE,CAAC,aAAa,CAAC,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;gBACrE,OAAO,EAAE,CAAC,qBAAqB,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC;YACvD,CAAC,CAAC,CAAC,CAAC;YAEJ,
|
|
1
|
+
{"version":3,"file":"cua.js","sourceRoot":"","sources":["../../../src/e2e/suites/cua.ts"],"names":[],"mappings":"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"}
|
package/dist-agent/bundle.cjs
CHANGED
|
@@ -20510,7 +20510,7 @@ var require_prompts3 = __commonJS({
|
|
|
20510
20510
|
|
|
20511
20511
|
// dist/utils/version-check.js
|
|
20512
20512
|
function isBundled() {
|
|
20513
|
-
const v15 = "0.1.195-dev.feat-e2e-test-system.
|
|
20513
|
+
const v15 = "0.1.195-dev.feat-e2e-test-system.3";
|
|
20514
20514
|
return typeof v15 === "string" && v15 !== "undefined";
|
|
20515
20515
|
}
|
|
20516
20516
|
function getPackageRoot() {
|
|
@@ -20527,7 +20527,7 @@ function getInstallationInfo() {
|
|
|
20527
20527
|
};
|
|
20528
20528
|
}
|
|
20529
20529
|
function getCurrentVersion() {
|
|
20530
|
-
const bundledVersion = "0.1.195-dev.feat-e2e-test-system.
|
|
20530
|
+
const bundledVersion = "0.1.195-dev.feat-e2e-test-system.3";
|
|
20531
20531
|
if (bundledVersion && bundledVersion !== "undefined") {
|
|
20532
20532
|
return bundledVersion;
|
|
20533
20533
|
}
|
|
@@ -1030414,37 +1030414,40 @@ var init_browser = __esm({
|
|
|
1030414
1030414
|
await ensureBrowser();
|
|
1030415
1030415
|
return ok11("Browser ensured");
|
|
1030416
1030416
|
}));
|
|
1030417
|
-
|
|
1030418
|
-
|
|
1030419
|
-
|
|
1030420
|
-
|
|
1030421
|
-
|
|
1030422
|
-
|
|
1030423
|
-
|
|
1030424
|
-
|
|
1030425
|
-
|
|
1030426
|
-
|
|
1030427
|
-
|
|
1030428
|
-
|
|
1030429
|
-
|
|
1030430
|
-
tests.push(await runTest("browser", "browser.screenshot", "Screenshot", async () => {
|
|
1030431
|
-
const browser = await import_playwright2.chromium.connectOverCDP(getCdpEndpoint());
|
|
1030432
|
-
const page = browser.contexts()[0].pages().at(0);
|
|
1030433
|
-
if (page === void 0)
|
|
1030434
|
-
return skipped("No Playwright page available");
|
|
1030435
|
-
const screenshotPath = import_node_path61.default.join(context.artifactsDir, "browser-screenshot.png");
|
|
1030436
|
-
await page.screenshot({ path: screenshotPath });
|
|
1030437
|
-
if (!import_node_fs61.default.existsSync(screenshotPath))
|
|
1030438
|
-
throw new Error("Screenshot not saved");
|
|
1030439
|
-
return ok11("Screenshot captured", { screenshotPath });
|
|
1030440
|
-
}));
|
|
1030441
|
-
if (context.mode === "full") {
|
|
1030442
|
-
tests.push(await runTest("browser", "browser.network", "Network capture", async () => {
|
|
1030443
|
-
const resp = await fetch(`${localServer.baseUrl}/api/echo?runId=${context.runId}`);
|
|
1030444
|
-
if (!resp.ok)
|
|
1030445
|
-
throw new Error(`Echo endpoint failed: ${resp.status}`);
|
|
1030446
|
-
return ok11("Network request succeeded");
|
|
1030417
|
+
const browser = await import_playwright2.chromium.connectOverCDP(getCdpEndpoint());
|
|
1030418
|
+
try {
|
|
1030419
|
+
tests.push(await runTest("browser", "browser.local_page", "Local page interaction", async () => {
|
|
1030420
|
+
const contextObj = browser.contexts()[0] ?? await browser.newContext();
|
|
1030421
|
+
const page = contextObj.pages()[0] ?? await contextObj.newPage();
|
|
1030422
|
+
await page.goto(`${localServer.baseUrl}/e2e/browser?runId=${context.runId}`);
|
|
1030423
|
+
await page.fill("#text-input", `VisionClaw E2E ${context.runId}`);
|
|
1030424
|
+
await page.click("#click-button");
|
|
1030425
|
+
await page.check("#checkbox");
|
|
1030426
|
+
const result = await page.locator("#result").textContent();
|
|
1030427
|
+
if (result !== "checked")
|
|
1030428
|
+
throw new Error(`Unexpected result: ${result ?? "null"}`);
|
|
1030429
|
+
return ok11("Local page interactions succeeded");
|
|
1030447
1030430
|
}));
|
|
1030431
|
+
tests.push(await runTest("browser", "browser.screenshot", "Screenshot", async () => {
|
|
1030432
|
+
const page = browser.contexts()[0].pages().at(0);
|
|
1030433
|
+
if (page === void 0)
|
|
1030434
|
+
return skipped("No Playwright page available");
|
|
1030435
|
+
const screenshotPath = import_node_path61.default.join(context.artifactsDir, "browser-screenshot.png");
|
|
1030436
|
+
await page.screenshot({ path: screenshotPath });
|
|
1030437
|
+
if (!import_node_fs61.default.existsSync(screenshotPath))
|
|
1030438
|
+
throw new Error("Screenshot not saved");
|
|
1030439
|
+
return ok11("Screenshot captured", { screenshotPath });
|
|
1030440
|
+
}));
|
|
1030441
|
+
if (context.mode === "full") {
|
|
1030442
|
+
tests.push(await runTest("browser", "browser.network", "Network capture", async () => {
|
|
1030443
|
+
const resp = await fetch(`${localServer.baseUrl}/api/echo?runId=${context.runId}`);
|
|
1030444
|
+
if (!resp.ok)
|
|
1030445
|
+
throw new Error(`Echo endpoint failed: ${resp.status}`);
|
|
1030446
|
+
return ok11("Network request succeeded");
|
|
1030447
|
+
}));
|
|
1030448
|
+
}
|
|
1030449
|
+
} finally {
|
|
1030450
|
+
await browser.close();
|
|
1030448
1030451
|
}
|
|
1030449
1030452
|
} finally {
|
|
1030450
1030453
|
await localServer.close();
|
|
@@ -1030493,32 +1030496,35 @@ var init_cua = __esm({
|
|
|
1030493
1030496
|
import_node_fs62.default.writeFileSync(screenshotPath, Buffer.from(shot.base64, "base64"));
|
|
1030494
1030497
|
return ok11("Screenshot captured", { screenshotPath });
|
|
1030495
1030498
|
}));
|
|
1030496
|
-
|
|
1030497
|
-
|
|
1030498
|
-
|
|
1030499
|
-
|
|
1030500
|
-
|
|
1030501
|
-
|
|
1030502
|
-
|
|
1030503
|
-
|
|
1030504
|
-
|
|
1030505
|
-
|
|
1030506
|
-
|
|
1030507
|
-
|
|
1030508
|
-
|
|
1030509
|
-
|
|
1030510
|
-
|
|
1030511
|
-
|
|
1030512
|
-
|
|
1030513
|
-
|
|
1030514
|
-
|
|
1030515
|
-
|
|
1030516
|
-
|
|
1030517
|
-
|
|
1030518
|
-
|
|
1030519
|
-
|
|
1030520
|
-
|
|
1030521
|
-
|
|
1030499
|
+
await ensureBrowser();
|
|
1030500
|
+
const browser = await import_playwright3.chromium.connectOverCDP(getCdpEndpoint());
|
|
1030501
|
+
try {
|
|
1030502
|
+
tests.push(await runTest("cua", "cua.open_local_page", "Open local page", async () => {
|
|
1030503
|
+
const contextObj = browser.contexts()[0] ?? await browser.newContext();
|
|
1030504
|
+
const page = contextObj.pages()[0] ?? await contextObj.newPage();
|
|
1030505
|
+
await page.goto(`${localServer.baseUrl}/e2e/cua?runId=${context.runId}`);
|
|
1030506
|
+
return ok11("Local CUA page opened");
|
|
1030507
|
+
}));
|
|
1030508
|
+
tests.push(await runTest("cua", "cua.click_and_type", "Click and type", async () => {
|
|
1030509
|
+
if (!isDisplaySizeInitialized3()) {
|
|
1030510
|
+
return skipped("Display size not initialized; grant Accessibility and Screen Recording permissions");
|
|
1030511
|
+
}
|
|
1030512
|
+
const page = browser.contexts()[0]?.pages().find((p10) => p10.url().includes("/e2e/cua"));
|
|
1030513
|
+
if (!page)
|
|
1030514
|
+
return skipped("CUA test page not open");
|
|
1030515
|
+
const box = await page.locator("#text-input").boundingBox();
|
|
1030516
|
+
if (!box)
|
|
1030517
|
+
return warning("Could not resolve input bounding box");
|
|
1030518
|
+
await click3(Math.round(box.x + box.width / 2), Math.round(box.y + box.height / 2));
|
|
1030519
|
+
await typeText3(`VisionClaw E2E ${context.runId}`);
|
|
1030520
|
+
const value = await page.inputValue("#text-input");
|
|
1030521
|
+
if (!value.includes(context.runId))
|
|
1030522
|
+
throw new Error("Typed value not reflected in page");
|
|
1030523
|
+
return ok11("CUA click/type verified via Playwright");
|
|
1030524
|
+
}));
|
|
1030525
|
+
} finally {
|
|
1030526
|
+
await browser.close();
|
|
1030527
|
+
}
|
|
1030522
1030528
|
} finally {
|
|
1030523
1030529
|
await localServer.close();
|
|
1030524
1030530
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "visionclaw",
|
|
3
|
-
"version": "0.1.195-dev.feat-e2e-test-system.
|
|
3
|
+
"version": "0.1.195-dev.feat-e2e-test-system.3",
|
|
4
4
|
"description": "A personal assistant agent that runs on your desktop, receives commands from messaging channels, and executes tasks autonomously.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|