cbrowser 7.4.18 → 7.9.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/README.md +28 -6
- package/dist/browser.d.ts +26 -3
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +127 -4
- package/dist/browser.js.map +1 -1
- package/dist/cli.js +136 -6
- package/dist/cli.js.map +1 -1
- package/dist/mcp-server-remote.d.ts.map +1 -1
- package/dist/mcp-server-remote.js +20 -6
- package/dist/mcp-server-remote.js.map +1 -1
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +18 -4
- package/dist/mcp-server.js.map +1 -1
- package/dist/types.d.ts +19 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/examples/ci-cd/README.md +34 -0
- package/examples/ci-cd/github-actions.yml +57 -0
- package/examples/ci-cd/gitlab-ci.yml +63 -0
- package/examples/journeys/signup-flow.json +35 -0
- package/examples/natural-language-tests/README.md +77 -0
- package/examples/natural-language-tests/auth-flow-suite.txt +47 -0
- package/examples/natural-language-tests/e-commerce-suite.txt +96 -0
- package/examples/personas/accessibility-tester.json +53 -0
- package/examples/workflows/accessibility-audit.md +151 -0
- package/examples/workflows/chaos-resilience-testing.md +151 -0
- package/examples/workflows/e2e-login-checkout.md +106 -0
- package/examples/workflows/persona-comparison-report.md +153 -0
- package/examples/workflows/visual-regression-ci.md +123 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1019,12 +1019,34 @@ CBrowser uses optimized Chromium launch flags for fast startup:
|
|
|
1019
1019
|
|
|
1020
1020
|
See the [`examples/`](examples/) directory:
|
|
1021
1021
|
|
|
1022
|
-
|
|
1023
|
-
- `
|
|
1024
|
-
- `
|
|
1025
|
-
- `
|
|
1026
|
-
- `
|
|
1027
|
-
|
|
1022
|
+
### TypeScript Examples
|
|
1023
|
+
- [`basic-usage.ts`](examples/basic-usage.ts) - Navigation, extraction, sessions
|
|
1024
|
+
- [`smart-automation.ts`](examples/smart-automation.ts) - Smart click, assertions, test generation
|
|
1025
|
+
- [`visual-testing.ts`](examples/visual-testing.ts) - AI visual regression, cross-browser, responsive, A/B comparison
|
|
1026
|
+
- [`remote-mcp.ts`](examples/remote-mcp.ts) - Remote MCP server, Auth0 OAuth, demo server setup
|
|
1027
|
+
|
|
1028
|
+
### Workflow Recipes
|
|
1029
|
+
- [`workflows/e2e-login-checkout.md`](examples/workflows/e2e-login-checkout.md) - End-to-end login and checkout flow with session persistence
|
|
1030
|
+
- [`workflows/visual-regression-ci.md`](examples/workflows/visual-regression-ci.md) - Visual regression testing with baselines, cross-browser, and responsive checks
|
|
1031
|
+
- [`workflows/accessibility-audit.md`](examples/workflows/accessibility-audit.md) - Accessibility bug hunting with persona-based a11y testing
|
|
1032
|
+
- [`workflows/chaos-resilience-testing.md`](examples/workflows/chaos-resilience-testing.md) - Chaos engineering: network failures, slow responses, element removal
|
|
1033
|
+
- [`workflows/persona-comparison-report.md`](examples/workflows/persona-comparison-report.md) - Multi-persona comparison with heatmaps and prioritized recommendations
|
|
1034
|
+
|
|
1035
|
+
### CI/CD Integration
|
|
1036
|
+
- [`ci-cd/github-actions.yml`](examples/ci-cd/github-actions.yml) - GitHub Actions workflow for NL tests, visual and perf regression
|
|
1037
|
+
- [`ci-cd/gitlab-ci.yml`](examples/ci-cd/gitlab-ci.yml) - GitLab CI pipeline with staged checks
|
|
1038
|
+
- [`ci-cd/README.md`](examples/ci-cd/README.md) - Setup guide and baseline management
|
|
1039
|
+
|
|
1040
|
+
### Natural Language Tests
|
|
1041
|
+
- [`natural-language-tests/e-commerce-suite.txt`](examples/natural-language-tests/e-commerce-suite.txt) - E-commerce guest checkout, search, and mobile tests
|
|
1042
|
+
- [`natural-language-tests/auth-flow-suite.txt`](examples/natural-language-tests/auth-flow-suite.txt) - Login, invalid credentials, and password reset flows
|
|
1043
|
+
- [`natural-language-tests/README.md`](examples/natural-language-tests/README.md) - NL test syntax reference and tips
|
|
1044
|
+
|
|
1045
|
+
### Configuration Templates
|
|
1046
|
+
- [`journeys/checkout-flow.json`](examples/journeys/checkout-flow.json) - Checkout journey definition
|
|
1047
|
+
- [`journeys/signup-flow.json`](examples/journeys/signup-flow.json) - User registration journey
|
|
1048
|
+
- [`personas/custom-persona.json`](examples/personas/custom-persona.json) - QA tester persona template
|
|
1049
|
+
- [`personas/accessibility-tester.json`](examples/personas/accessibility-tester.json) - Visual impairment persona with screen magnification
|
|
1028
1050
|
|
|
1029
1051
|
## Troubleshooting
|
|
1030
1052
|
|
package/dist/browser.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { type Page } from "playwright";
|
|
7
7
|
import { type CBrowserConfig } from "./config.js";
|
|
8
|
-
import type { SavedSession, NavigationResult, ClickResult, ExtractResult, JourneyResult, CleanupOptions, CleanupResult, JourneyOptions, NetworkMock, NetworkRequest, PerformanceMetrics, PerformanceAuditResult, SmartRetryResult, AssertionResult, SelectorCacheEntry, SelectorCacheStats, PageAnalysis, TestGenerationResult, DismissOverlayOptions, DismissOverlayResult } from "./types.js";
|
|
8
|
+
import type { SavedSession, NavigationResult, ClickResult, ExtractResult, JourneyResult, CleanupOptions, CleanupResult, JourneyOptions, NetworkMock, NetworkRequest, PerformanceMetrics, PerformanceAuditResult, SmartRetryResult, AssertionResult, SelectorCacheEntry, SelectorCacheStats, PageAnalysis, TestGenerationResult, DismissOverlayOptions, DismissOverlayResult, SessionMetadata, LoadSessionResult } from "./types.js";
|
|
9
9
|
export declare class CBrowser {
|
|
10
10
|
private config;
|
|
11
11
|
private paths;
|
|
@@ -307,15 +307,38 @@ export declare class CBrowser {
|
|
|
307
307
|
/**
|
|
308
308
|
* Load a saved session.
|
|
309
309
|
*/
|
|
310
|
-
loadSession(name: string): Promise<
|
|
310
|
+
loadSession(name: string): Promise<LoadSessionResult>;
|
|
311
311
|
/**
|
|
312
|
-
* List all saved
|
|
312
|
+
* List all saved session names.
|
|
313
313
|
*/
|
|
314
314
|
listSessions(): string[];
|
|
315
|
+
/**
|
|
316
|
+
* List all saved sessions with rich metadata.
|
|
317
|
+
*/
|
|
318
|
+
listSessionsDetailed(): SessionMetadata[];
|
|
319
|
+
/**
|
|
320
|
+
* Get detailed info for a single session.
|
|
321
|
+
*/
|
|
322
|
+
getSessionDetails(name: string): SavedSession | null;
|
|
315
323
|
/**
|
|
316
324
|
* Delete a saved session.
|
|
317
325
|
*/
|
|
318
326
|
deleteSession(name: string): boolean;
|
|
327
|
+
/**
|
|
328
|
+
* Delete sessions older than a given number of days.
|
|
329
|
+
*/
|
|
330
|
+
cleanupSessions(olderThanDays: number): {
|
|
331
|
+
deleted: string[];
|
|
332
|
+
kept: string[];
|
|
333
|
+
};
|
|
334
|
+
/**
|
|
335
|
+
* Export a session to a portable JSON file.
|
|
336
|
+
*/
|
|
337
|
+
exportSession(name: string, outputPath: string): boolean;
|
|
338
|
+
/**
|
|
339
|
+
* Import a session from a JSON file.
|
|
340
|
+
*/
|
|
341
|
+
importSession(inputPath: string, name: string): boolean;
|
|
319
342
|
/**
|
|
320
343
|
* Run an autonomous journey.
|
|
321
344
|
*/
|
package/dist/browser.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAA2C,KAAK,IAAI,EAAiD,MAAM,YAAY,CAAC;AAI/H,OAAO,EAAE,KAAK,cAAc,EAAgE,MAAM,aAAa,CAAC;AAEhH,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,aAAa,EAKb,cAAc,EACd,aAAa,EACb,cAAc,EAEd,WAAW,EACX,cAAc,EAId,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EAEhB,eAAe,EAEf,kBAAkB,EAElB,kBAAkB,EAElB,YAAY,EAIZ,oBAAoB,EA6DpB,qBAAqB,EAErB,oBAAoB,
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"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"}
|
package/dist/browser.js
CHANGED
|
@@ -2350,11 +2350,31 @@ class CBrowser {
|
|
|
2350
2350
|
async loadSession(name) {
|
|
2351
2351
|
const sessionPath = (0, path_1.join)(this.paths.sessionsDir, `${name}.json`);
|
|
2352
2352
|
if (!(0, fs_1.existsSync)(sessionPath)) {
|
|
2353
|
-
return false;
|
|
2353
|
+
return { success: false, name, cookiesRestored: 0, localStorageKeysRestored: 0, sessionStorageKeysRestored: 0 };
|
|
2354
2354
|
}
|
|
2355
2355
|
const session = JSON.parse((0, fs_1.readFileSync)(sessionPath, "utf-8"));
|
|
2356
2356
|
const page = await this.getPage();
|
|
2357
2357
|
const context = this.context;
|
|
2358
|
+
const result = {
|
|
2359
|
+
success: true,
|
|
2360
|
+
name,
|
|
2361
|
+
cookiesRestored: session.cookies.length,
|
|
2362
|
+
localStorageKeysRestored: Object.keys(session.localStorage).length,
|
|
2363
|
+
sessionStorageKeysRestored: Object.keys(session.sessionStorage).length,
|
|
2364
|
+
};
|
|
2365
|
+
// Cross-domain warning
|
|
2366
|
+
const currentUrl = page.url();
|
|
2367
|
+
if (currentUrl && currentUrl !== "about:blank") {
|
|
2368
|
+
try {
|
|
2369
|
+
const currentDomain = new URL(currentUrl).hostname;
|
|
2370
|
+
if (session.domain && currentDomain !== session.domain) {
|
|
2371
|
+
result.warning = `Session '${name}' was saved for ${session.domain} but current page is ${currentDomain}. Some cookies may not apply.`;
|
|
2372
|
+
}
|
|
2373
|
+
}
|
|
2374
|
+
catch {
|
|
2375
|
+
// URL parsing failed, skip warning
|
|
2376
|
+
}
|
|
2377
|
+
}
|
|
2358
2378
|
// Restore cookies
|
|
2359
2379
|
if (session.cookies.length > 0) {
|
|
2360
2380
|
await context.addCookies(session.cookies);
|
|
@@ -2378,14 +2398,59 @@ class CBrowser {
|
|
|
2378
2398
|
// Update lastUsed
|
|
2379
2399
|
session.lastUsed = new Date().toISOString();
|
|
2380
2400
|
(0, fs_1.writeFileSync)(sessionPath, JSON.stringify(session, null, 2));
|
|
2381
|
-
return
|
|
2401
|
+
return result;
|
|
2382
2402
|
}
|
|
2383
2403
|
/**
|
|
2384
|
-
* List all saved
|
|
2404
|
+
* List all saved session names.
|
|
2385
2405
|
*/
|
|
2386
2406
|
listSessions() {
|
|
2387
2407
|
const files = (0, fs_1.readdirSync)(this.paths.sessionsDir);
|
|
2388
|
-
return files.filter((f) => f.endsWith(".json")).map((f) => f.replace(".json", ""));
|
|
2408
|
+
return files.filter((f) => f.endsWith(".json") && f !== "last-session.json").map((f) => f.replace(".json", ""));
|
|
2409
|
+
}
|
|
2410
|
+
/**
|
|
2411
|
+
* List all saved sessions with rich metadata.
|
|
2412
|
+
*/
|
|
2413
|
+
listSessionsDetailed() {
|
|
2414
|
+
const files = (0, fs_1.readdirSync)(this.paths.sessionsDir);
|
|
2415
|
+
const sessions = [];
|
|
2416
|
+
for (const file of files) {
|
|
2417
|
+
if (!file.endsWith(".json") || file === "last-session.json")
|
|
2418
|
+
continue;
|
|
2419
|
+
const filePath = (0, path_1.join)(this.paths.sessionsDir, file);
|
|
2420
|
+
try {
|
|
2421
|
+
const data = JSON.parse((0, fs_1.readFileSync)(filePath, "utf-8"));
|
|
2422
|
+
const stats = (0, fs_1.statSync)(filePath);
|
|
2423
|
+
sessions.push({
|
|
2424
|
+
name: data.name || file.replace(".json", ""),
|
|
2425
|
+
created: data.created,
|
|
2426
|
+
lastUsed: data.lastUsed,
|
|
2427
|
+
domain: data.domain,
|
|
2428
|
+
url: data.url,
|
|
2429
|
+
cookies: data.cookies?.length || 0,
|
|
2430
|
+
localStorageKeys: Object.keys(data.localStorage || {}).length,
|
|
2431
|
+
sessionStorageKeys: Object.keys(data.sessionStorage || {}).length,
|
|
2432
|
+
sizeBytes: stats.size,
|
|
2433
|
+
});
|
|
2434
|
+
}
|
|
2435
|
+
catch {
|
|
2436
|
+
// Skip malformed session files
|
|
2437
|
+
}
|
|
2438
|
+
}
|
|
2439
|
+
return sessions.sort((a, b) => new Date(b.lastUsed).getTime() - new Date(a.lastUsed).getTime());
|
|
2440
|
+
}
|
|
2441
|
+
/**
|
|
2442
|
+
* Get detailed info for a single session.
|
|
2443
|
+
*/
|
|
2444
|
+
getSessionDetails(name) {
|
|
2445
|
+
const sessionPath = (0, path_1.join)(this.paths.sessionsDir, `${name}.json`);
|
|
2446
|
+
if (!(0, fs_1.existsSync)(sessionPath))
|
|
2447
|
+
return null;
|
|
2448
|
+
try {
|
|
2449
|
+
return JSON.parse((0, fs_1.readFileSync)(sessionPath, "utf-8"));
|
|
2450
|
+
}
|
|
2451
|
+
catch {
|
|
2452
|
+
return null;
|
|
2453
|
+
}
|
|
2389
2454
|
}
|
|
2390
2455
|
/**
|
|
2391
2456
|
* Delete a saved session.
|
|
@@ -2398,6 +2463,64 @@ class CBrowser {
|
|
|
2398
2463
|
}
|
|
2399
2464
|
return false;
|
|
2400
2465
|
}
|
|
2466
|
+
/**
|
|
2467
|
+
* Delete sessions older than a given number of days.
|
|
2468
|
+
*/
|
|
2469
|
+
cleanupSessions(olderThanDays) {
|
|
2470
|
+
const cutoff = Date.now() - olderThanDays * 24 * 60 * 60 * 1000;
|
|
2471
|
+
const deleted = [];
|
|
2472
|
+
const kept = [];
|
|
2473
|
+
const files = (0, fs_1.readdirSync)(this.paths.sessionsDir);
|
|
2474
|
+
for (const file of files) {
|
|
2475
|
+
if (!file.endsWith(".json") || file === "last-session.json")
|
|
2476
|
+
continue;
|
|
2477
|
+
const filePath = (0, path_1.join)(this.paths.sessionsDir, file);
|
|
2478
|
+
const name = file.replace(".json", "");
|
|
2479
|
+
try {
|
|
2480
|
+
const data = JSON.parse((0, fs_1.readFileSync)(filePath, "utf-8"));
|
|
2481
|
+
const lastUsed = new Date(data.lastUsed).getTime();
|
|
2482
|
+
if (lastUsed < cutoff) {
|
|
2483
|
+
(0, fs_1.unlinkSync)(filePath);
|
|
2484
|
+
deleted.push(name);
|
|
2485
|
+
}
|
|
2486
|
+
else {
|
|
2487
|
+
kept.push(name);
|
|
2488
|
+
}
|
|
2489
|
+
}
|
|
2490
|
+
catch {
|
|
2491
|
+
kept.push(name);
|
|
2492
|
+
}
|
|
2493
|
+
}
|
|
2494
|
+
return { deleted, kept };
|
|
2495
|
+
}
|
|
2496
|
+
/**
|
|
2497
|
+
* Export a session to a portable JSON file.
|
|
2498
|
+
*/
|
|
2499
|
+
exportSession(name, outputPath) {
|
|
2500
|
+
const sessionPath = (0, path_1.join)(this.paths.sessionsDir, `${name}.json`);
|
|
2501
|
+
if (!(0, fs_1.existsSync)(sessionPath))
|
|
2502
|
+
return false;
|
|
2503
|
+
const data = (0, fs_1.readFileSync)(sessionPath, "utf-8");
|
|
2504
|
+
(0, fs_1.writeFileSync)(outputPath, data);
|
|
2505
|
+
return true;
|
|
2506
|
+
}
|
|
2507
|
+
/**
|
|
2508
|
+
* Import a session from a JSON file.
|
|
2509
|
+
*/
|
|
2510
|
+
importSession(inputPath, name) {
|
|
2511
|
+
if (!(0, fs_1.existsSync)(inputPath))
|
|
2512
|
+
return false;
|
|
2513
|
+
try {
|
|
2514
|
+
const data = JSON.parse((0, fs_1.readFileSync)(inputPath, "utf-8"));
|
|
2515
|
+
data.name = name;
|
|
2516
|
+
const sessionPath = (0, path_1.join)(this.paths.sessionsDir, `${name}.json`);
|
|
2517
|
+
(0, fs_1.writeFileSync)(sessionPath, JSON.stringify(data, null, 2));
|
|
2518
|
+
return true;
|
|
2519
|
+
}
|
|
2520
|
+
catch {
|
|
2521
|
+
return false;
|
|
2522
|
+
}
|
|
2523
|
+
}
|
|
2401
2524
|
// =========================================================================
|
|
2402
2525
|
// Journeys
|
|
2403
2526
|
// =========================================================================
|