@testivai/witness-cdp 0.1.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.
Potentially problematic release.
This version of @testivai/witness-cdp might be problematic. Click here for more details.
- package/LICENSE +21 -0
- package/README.md +405 -0
- package/dist/__tests__/setup.d.ts +4 -0
- package/dist/__tests__/setup.d.ts.map +1 -0
- package/dist/__tests__/setup.js +24 -0
- package/dist/__tests__/setup.js.map +1 -0
- package/dist/cdp/binding.d.ts +44 -0
- package/dist/cdp/binding.d.ts.map +1 -0
- package/dist/cdp/binding.js +183 -0
- package/dist/cdp/binding.js.map +1 -0
- package/dist/cdp/capture.d.ts +42 -0
- package/dist/cdp/capture.d.ts.map +1 -0
- package/dist/cdp/capture.js +235 -0
- package/dist/cdp/capture.js.map +1 -0
- package/dist/cdp/client.d.ts +63 -0
- package/dist/cdp/client.d.ts.map +1 -0
- package/dist/cdp/client.js +279 -0
- package/dist/cdp/client.js.map +1 -0
- package/dist/cdp/discovery.d.ts +33 -0
- package/dist/cdp/discovery.d.ts.map +1 -0
- package/dist/cdp/discovery.js +157 -0
- package/dist/cdp/discovery.js.map +1 -0
- package/dist/commands/auth.d.ts +3 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +122 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/capture.d.ts +3 -0
- package/dist/commands/capture.d.ts.map +1 -0
- package/dist/commands/capture.js +143 -0
- package/dist/commands/capture.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +140 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/run.d.ts +3 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +307 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +77 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +244 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/file-naming.d.ts +31 -0
- package/dist/utils/file-naming.d.ts.map +1 -0
- package/dist/utils/file-naming.js +137 -0
- package/dist/utils/file-naming.js.map +1 -0
- package/dist/utils/framework-detect.d.ts +31 -0
- package/dist/utils/framework-detect.d.ts.map +1 -0
- package/dist/utils/framework-detect.js +379 -0
- package/dist/utils/framework-detect.js.map +1 -0
- package/dist/utils/logger.d.ts +29 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +114 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/process.d.ts +61 -0
- package/dist/utils/process.d.ts.map +1 -0
- package/dist/utils/process.js +208 -0
- package/dist/utils/process.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;;GAGG"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File naming utilities for TestivAI CDP SDK
|
|
3
|
+
* Converts snapshot names to safe filenames
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Convert a snapshot name to a safe filename
|
|
7
|
+
* - Replace spaces with hyphens
|
|
8
|
+
* - Remove or replace special characters
|
|
9
|
+
* - Limit length
|
|
10
|
+
* - Ensure it's not empty
|
|
11
|
+
*/
|
|
12
|
+
export declare function toSafeFilename(name: string): string;
|
|
13
|
+
/**
|
|
14
|
+
* Generate a unique filename with timestamp
|
|
15
|
+
*/
|
|
16
|
+
export declare function generateUniqueFilename(name: string, extension?: string): string;
|
|
17
|
+
/**
|
|
18
|
+
* Extract snapshot name from a URL
|
|
19
|
+
* Useful for auto-generating names from page URLs
|
|
20
|
+
*/
|
|
21
|
+
export declare function extractNameFromUrl(url: string): string;
|
|
22
|
+
/**
|
|
23
|
+
* Sanitize a name for use in test names
|
|
24
|
+
* Less restrictive than filename sanitization
|
|
25
|
+
*/
|
|
26
|
+
export declare function sanitizeTestName(name: string): string;
|
|
27
|
+
/**
|
|
28
|
+
* Check if a filename is safe
|
|
29
|
+
*/
|
|
30
|
+
export declare function isSafeFilename(filename: string): boolean;
|
|
31
|
+
//# sourceMappingURL=file-naming.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-naming.d.ts","sourceRoot":"","sources":["../../src/utils/file-naming.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAwCnD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,GAAE,MAAW,GAAG,MAAM,CAMnF;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA6BtD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAoBrD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CA4BxD"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* File naming utilities for TestivAI CDP SDK
|
|
4
|
+
* Converts snapshot names to safe filenames
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.toSafeFilename = toSafeFilename;
|
|
8
|
+
exports.generateUniqueFilename = generateUniqueFilename;
|
|
9
|
+
exports.extractNameFromUrl = extractNameFromUrl;
|
|
10
|
+
exports.sanitizeTestName = sanitizeTestName;
|
|
11
|
+
exports.isSafeFilename = isSafeFilename;
|
|
12
|
+
/**
|
|
13
|
+
* Convert a snapshot name to a safe filename
|
|
14
|
+
* - Replace spaces with hyphens
|
|
15
|
+
* - Remove or replace special characters
|
|
16
|
+
* - Limit length
|
|
17
|
+
* - Ensure it's not empty
|
|
18
|
+
*/
|
|
19
|
+
function toSafeFilename(name) {
|
|
20
|
+
if (!name || typeof name !== 'string') {
|
|
21
|
+
return 'snapshot';
|
|
22
|
+
}
|
|
23
|
+
// Remove leading/trailing whitespace
|
|
24
|
+
let filename = name.trim();
|
|
25
|
+
// If empty after trimming, use default
|
|
26
|
+
if (!filename) {
|
|
27
|
+
return 'snapshot';
|
|
28
|
+
}
|
|
29
|
+
// Replace spaces and common separators with hyphens
|
|
30
|
+
filename = filename.replace(/[\s_\/\\]+/g, '-');
|
|
31
|
+
// Remove invalid filename characters (Windows-safe)
|
|
32
|
+
// Keep: letters, numbers, hyphens, dots, underscores, parentheses
|
|
33
|
+
filename = filename.replace(/[<>:"|?*]/g, '');
|
|
34
|
+
// Replace multiple consecutive hyphens with single hyphen
|
|
35
|
+
filename = filename.replace(/-+/g, '-');
|
|
36
|
+
// Remove leading/trailing hyphens and dots
|
|
37
|
+
filename = filename.replace(/^[-\.]+|[-\.]+$/g, '');
|
|
38
|
+
// Limit length (255 is max for most filesystems, leave room for extension)
|
|
39
|
+
if (filename.length > 200) {
|
|
40
|
+
filename = filename.substring(0, 200);
|
|
41
|
+
// Remove trailing hyphen if we cut in the middle
|
|
42
|
+
filename = filename.replace(/-$/, '');
|
|
43
|
+
}
|
|
44
|
+
// If still empty after cleaning, use default
|
|
45
|
+
if (!filename) {
|
|
46
|
+
return 'snapshot';
|
|
47
|
+
}
|
|
48
|
+
// Convert to lowercase for consistency
|
|
49
|
+
return filename.toLowerCase();
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Generate a unique filename with timestamp
|
|
53
|
+
*/
|
|
54
|
+
function generateUniqueFilename(name, extension = '') {
|
|
55
|
+
const safeName = toSafeFilename(name);
|
|
56
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
57
|
+
const uniqueName = `${safeName}-${timestamp}`;
|
|
58
|
+
return extension ? `${uniqueName}.${extension.replace(/^\./, '')}` : uniqueName;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Extract snapshot name from a URL
|
|
62
|
+
* Useful for auto-generating names from page URLs
|
|
63
|
+
*/
|
|
64
|
+
function extractNameFromUrl(url) {
|
|
65
|
+
try {
|
|
66
|
+
const urlObj = new URL(url);
|
|
67
|
+
const pathname = urlObj.pathname;
|
|
68
|
+
// Remove leading/trailing slashes
|
|
69
|
+
const cleanPath = pathname.replace(/^\/|\/$/g, '');
|
|
70
|
+
// If path is empty or just '/', use hostname
|
|
71
|
+
if (!cleanPath) {
|
|
72
|
+
return urlObj.hostname.replace(/\./g, '-');
|
|
73
|
+
}
|
|
74
|
+
// Convert path segments to name
|
|
75
|
+
const segments = cleanPath.split('/');
|
|
76
|
+
const lastSegment = segments[segments.length - 1];
|
|
77
|
+
// If last segment looks like an ID, use the parent
|
|
78
|
+
if (/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i.test(lastSegment) ||
|
|
79
|
+
/^\d+$/.test(lastSegment)) {
|
|
80
|
+
return segments[segments.length - 2] || 'page';
|
|
81
|
+
}
|
|
82
|
+
return lastSegment || 'page';
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
// If URL parsing fails, extract from string
|
|
86
|
+
const matches = url.match(/\/([^\/]+)\/?$/);
|
|
87
|
+
return matches ? matches[1] : 'page';
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Sanitize a name for use in test names
|
|
92
|
+
* Less restrictive than filename sanitization
|
|
93
|
+
*/
|
|
94
|
+
function sanitizeTestName(name) {
|
|
95
|
+
if (!name || typeof name !== 'string') {
|
|
96
|
+
return 'test';
|
|
97
|
+
}
|
|
98
|
+
// Remove leading/trailing whitespace
|
|
99
|
+
let testName = name.trim();
|
|
100
|
+
// Replace multiple spaces with single space
|
|
101
|
+
testName = testName.replace(/\s+/g, ' ');
|
|
102
|
+
// Remove control characters
|
|
103
|
+
testName = testName.replace(/[\x00-\x1F\x7F]/g, '');
|
|
104
|
+
// Limit length
|
|
105
|
+
if (testName.length > 100) {
|
|
106
|
+
testName = testName.substring(0, 100);
|
|
107
|
+
}
|
|
108
|
+
return testName || 'test';
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Check if a filename is safe
|
|
112
|
+
*/
|
|
113
|
+
function isSafeFilename(filename) {
|
|
114
|
+
if (!filename || typeof filename !== 'string') {
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
// Check for invalid characters
|
|
118
|
+
if (/[<>:"|?*]/.test(filename)) {
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
// Check reserved names (Windows)
|
|
122
|
+
const reservedNames = [
|
|
123
|
+
'CON', 'PRN', 'AUX', 'NUL',
|
|
124
|
+
'COM1', 'COM2', 'COM3', 'COM4', 'COM5', 'COM6', 'COM7', 'COM8', 'COM9',
|
|
125
|
+
'LPT1', 'LPT2', 'LPT3', 'LPT4', 'LPT5', 'LPT6', 'LPT7', 'LPT8', 'LPT9'
|
|
126
|
+
];
|
|
127
|
+
const nameWithoutExt = filename.split('.')[0].toUpperCase();
|
|
128
|
+
if (reservedNames.includes(nameWithoutExt)) {
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
// Check length
|
|
132
|
+
if (filename.length > 255) {
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
return true;
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=file-naming.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-naming.js","sourceRoot":"","sources":["../../src/utils/file-naming.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { FrameworkDetection } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Framework detection utility
|
|
4
|
+
*/
|
|
5
|
+
export declare class FrameworkDetector {
|
|
6
|
+
/**
|
|
7
|
+
* Detect the testing framework in use
|
|
8
|
+
*/
|
|
9
|
+
static detect(): FrameworkDetection;
|
|
10
|
+
/**
|
|
11
|
+
* Detect Cypress
|
|
12
|
+
*/
|
|
13
|
+
private static detectCypress;
|
|
14
|
+
/**
|
|
15
|
+
* Detect WebdriverIO
|
|
16
|
+
*/
|
|
17
|
+
private static detectWebdriverIO;
|
|
18
|
+
/**
|
|
19
|
+
* Detect Selenium JS
|
|
20
|
+
*/
|
|
21
|
+
private static detectSeleniumJS;
|
|
22
|
+
/**
|
|
23
|
+
* Detect Selenium Python
|
|
24
|
+
*/
|
|
25
|
+
private static detectSeleniumPython;
|
|
26
|
+
/**
|
|
27
|
+
* Generate setup instructions for the detected framework
|
|
28
|
+
*/
|
|
29
|
+
private static generateInstructions;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=framework-detect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"framework-detect.d.ts","sourceRoot":"","sources":["../../src/utils/framework-detect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE9C;;GAEG;AACH,qBAAa,iBAAiB;IAC5B;;OAEG;IACH,MAAM,CAAC,MAAM,IAAI,kBAAkB;IA4DnC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAuC5B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAiChC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IA8C/B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IA4CnC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;CAuHpC"}
|
|
@@ -0,0 +1,379 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.FrameworkDetector = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
/**
|
|
40
|
+
* Framework detection utility
|
|
41
|
+
*/
|
|
42
|
+
class FrameworkDetector {
|
|
43
|
+
/**
|
|
44
|
+
* Detect the testing framework in use
|
|
45
|
+
*/
|
|
46
|
+
static detect() {
|
|
47
|
+
const cwd = process.cwd();
|
|
48
|
+
const evidence = [];
|
|
49
|
+
const configFiles = [];
|
|
50
|
+
let framework = 'unknown';
|
|
51
|
+
let confidence = 0;
|
|
52
|
+
// Check for Cypress
|
|
53
|
+
const cypressResult = this.detectCypress(cwd);
|
|
54
|
+
if (cypressResult.detected) {
|
|
55
|
+
framework = 'cypress';
|
|
56
|
+
confidence = cypressResult.confidence;
|
|
57
|
+
evidence.push(...cypressResult.evidence);
|
|
58
|
+
configFiles.push(...cypressResult.configFiles);
|
|
59
|
+
}
|
|
60
|
+
// Check for WebdriverIO
|
|
61
|
+
const wdioResult = this.detectWebdriverIO(cwd);
|
|
62
|
+
if (wdioResult.detected && wdioResult.confidence > confidence) {
|
|
63
|
+
framework = 'webdriverio';
|
|
64
|
+
confidence = wdioResult.confidence;
|
|
65
|
+
evidence.length = 0;
|
|
66
|
+
configFiles.length = 0;
|
|
67
|
+
evidence.push(...wdioResult.evidence);
|
|
68
|
+
configFiles.push(...wdioResult.configFiles);
|
|
69
|
+
}
|
|
70
|
+
// Check for Selenium JS
|
|
71
|
+
const seleniumJsResult = this.detectSeleniumJS(cwd);
|
|
72
|
+
if (seleniumJsResult.detected && seleniumJsResult.confidence > confidence) {
|
|
73
|
+
framework = 'selenium-js';
|
|
74
|
+
confidence = seleniumJsResult.confidence;
|
|
75
|
+
evidence.length = 0;
|
|
76
|
+
configFiles.length = 0;
|
|
77
|
+
evidence.push(...seleniumJsResult.evidence);
|
|
78
|
+
configFiles.push(...seleniumJsResult.configFiles);
|
|
79
|
+
}
|
|
80
|
+
// Check for Selenium Python
|
|
81
|
+
const seleniumPyResult = this.detectSeleniumPython(cwd);
|
|
82
|
+
if (seleniumPyResult.detected && seleniumPyResult.confidence > confidence) {
|
|
83
|
+
framework = 'selenium-python';
|
|
84
|
+
confidence = seleniumPyResult.confidence;
|
|
85
|
+
evidence.length = 0;
|
|
86
|
+
configFiles.length = 0;
|
|
87
|
+
evidence.push(...seleniumPyResult.evidence);
|
|
88
|
+
configFiles.push(...seleniumPyResult.configFiles);
|
|
89
|
+
}
|
|
90
|
+
const instructions = this.generateInstructions(framework);
|
|
91
|
+
return {
|
|
92
|
+
framework,
|
|
93
|
+
confidence,
|
|
94
|
+
evidence,
|
|
95
|
+
configFiles,
|
|
96
|
+
instructions,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Detect Cypress
|
|
101
|
+
*/
|
|
102
|
+
static detectCypress(cwd) {
|
|
103
|
+
const detected = false;
|
|
104
|
+
const evidence = [];
|
|
105
|
+
const configFiles = [];
|
|
106
|
+
let confidence = 0;
|
|
107
|
+
// Check for cypress.config.js/ts
|
|
108
|
+
const cypressConfigFiles = ['cypress.config.js', 'cypress.config.ts'];
|
|
109
|
+
for (const file of cypressConfigFiles) {
|
|
110
|
+
if (fs.existsSync(path.join(cwd, file))) {
|
|
111
|
+
configFiles.push(file);
|
|
112
|
+
evidence.push(`Found ${file}`);
|
|
113
|
+
confidence += 0.4;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// Check for cypress folder
|
|
117
|
+
if (fs.existsSync(path.join(cwd, 'cypress'))) {
|
|
118
|
+
evidence.push('Found cypress/ directory');
|
|
119
|
+
confidence += 0.3;
|
|
120
|
+
}
|
|
121
|
+
// Check package.json for cypress dependency
|
|
122
|
+
const packageJsonPath = path.join(cwd, 'package.json');
|
|
123
|
+
if (fs.existsSync(packageJsonPath)) {
|
|
124
|
+
try {
|
|
125
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
126
|
+
if (packageJson.dependencies?.cypress || packageJson.devDependencies?.cypress) {
|
|
127
|
+
evidence.push('Found cypress in package.json');
|
|
128
|
+
confidence += 0.3;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
// Ignore errors
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return { detected: confidence > 0, confidence, evidence, configFiles };
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Detect WebdriverIO
|
|
139
|
+
*/
|
|
140
|
+
static detectWebdriverIO(cwd) {
|
|
141
|
+
const detected = false;
|
|
142
|
+
const evidence = [];
|
|
143
|
+
const configFiles = [];
|
|
144
|
+
let confidence = 0;
|
|
145
|
+
// Check for wdio.conf.js/ts
|
|
146
|
+
const wdioConfigFiles = ['wdio.conf.js', 'wdio.conf.ts'];
|
|
147
|
+
for (const file of wdioConfigFiles) {
|
|
148
|
+
if (fs.existsSync(path.join(cwd, file))) {
|
|
149
|
+
configFiles.push(file);
|
|
150
|
+
evidence.push(`Found ${file}`);
|
|
151
|
+
confidence += 0.5;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
// Check package.json for webdriverio dependency
|
|
155
|
+
const packageJsonPath = path.join(cwd, 'package.json');
|
|
156
|
+
if (fs.existsSync(packageJsonPath)) {
|
|
157
|
+
try {
|
|
158
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
159
|
+
if (packageJson.dependencies?.webdriverio || packageJson.devDependencies?.webdriverio) {
|
|
160
|
+
evidence.push('Found webdriverio in package.json');
|
|
161
|
+
confidence += 0.5;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
// Ignore errors
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return { detected: confidence > 0, confidence, evidence, configFiles };
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Detect Selenium JS
|
|
172
|
+
*/
|
|
173
|
+
static detectSeleniumJS(cwd) {
|
|
174
|
+
const detected = false;
|
|
175
|
+
const evidence = [];
|
|
176
|
+
const configFiles = [];
|
|
177
|
+
let confidence = 0;
|
|
178
|
+
// Check package.json for selenium-webdriver dependency
|
|
179
|
+
const packageJsonPath = path.join(cwd, 'package.json');
|
|
180
|
+
if (fs.existsSync(packageJsonPath)) {
|
|
181
|
+
try {
|
|
182
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
183
|
+
if (packageJson.dependencies?.['selenium-webdriver'] ||
|
|
184
|
+
packageJson.devDependencies?.['selenium-webdriver']) {
|
|
185
|
+
evidence.push('Found selenium-webdriver in package.json');
|
|
186
|
+
confidence = 0.8;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
catch {
|
|
190
|
+
// Ignore errors
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
// Look for selenium usage in test files
|
|
194
|
+
const testDirs = ['test', 'tests', 'spec', '__tests__'];
|
|
195
|
+
for (const testDir of testDirs) {
|
|
196
|
+
const dirPath = path.join(cwd, testDir);
|
|
197
|
+
if (fs.existsSync(dirPath)) {
|
|
198
|
+
const files = fs.readdirSync(dirPath);
|
|
199
|
+
for (const file of files) {
|
|
200
|
+
if (file.endsWith('.js') || file.endsWith('.ts')) {
|
|
201
|
+
const filePath = path.join(dirPath, file);
|
|
202
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
203
|
+
if (content.includes('selenium-webdriver') ||
|
|
204
|
+
content.includes('import { Builder }') ||
|
|
205
|
+
content.includes('webdriver')) {
|
|
206
|
+
evidence.push(`Found selenium usage in ${path.join(testDir, file)}`);
|
|
207
|
+
confidence = Math.max(confidence, 0.6);
|
|
208
|
+
break;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
return { detected: confidence > 0, confidence, evidence, configFiles };
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Detect Selenium Python
|
|
218
|
+
*/
|
|
219
|
+
static detectSeleniumPython(cwd) {
|
|
220
|
+
const detected = false;
|
|
221
|
+
const evidence = [];
|
|
222
|
+
const configFiles = [];
|
|
223
|
+
let confidence = 0;
|
|
224
|
+
// Check for requirements.txt or pyproject.toml
|
|
225
|
+
const reqFiles = ['requirements.txt', 'pyproject.toml', 'Pipfile'];
|
|
226
|
+
for (const file of reqFiles) {
|
|
227
|
+
if (fs.existsSync(path.join(cwd, file))) {
|
|
228
|
+
const content = fs.readFileSync(path.join(cwd, file), 'utf-8');
|
|
229
|
+
if (content.includes('selenium')) {
|
|
230
|
+
evidence.push(`Found selenium in ${file}`);
|
|
231
|
+
confidence += 0.5;
|
|
232
|
+
configFiles.push(file);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
// Look for selenium usage in Python files
|
|
237
|
+
const testDirs = ['test', 'tests', 'spec'];
|
|
238
|
+
for (const testDir of testDirs) {
|
|
239
|
+
const dirPath = path.join(cwd, testDir);
|
|
240
|
+
if (fs.existsSync(dirPath)) {
|
|
241
|
+
const files = fs.readdirSync(dirPath);
|
|
242
|
+
for (const file of files) {
|
|
243
|
+
if (file.endsWith('.py')) {
|
|
244
|
+
const filePath = path.join(dirPath, file);
|
|
245
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
246
|
+
if (content.includes('from selenium import') ||
|
|
247
|
+
content.includes('import selenium') ||
|
|
248
|
+
content.includes('webdriver')) {
|
|
249
|
+
evidence.push(`Found selenium usage in ${path.join(testDir, file)}`);
|
|
250
|
+
confidence = Math.max(confidence, 0.7);
|
|
251
|
+
break;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
return { detected: confidence > 0, confidence, evidence, configFiles };
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Generate setup instructions for the detected framework
|
|
261
|
+
*/
|
|
262
|
+
static generateInstructions(framework) {
|
|
263
|
+
switch (framework) {
|
|
264
|
+
case 'cypress':
|
|
265
|
+
return [
|
|
266
|
+
'',
|
|
267
|
+
'To use TestivAI with Cypress:',
|
|
268
|
+
'',
|
|
269
|
+
'1. Add this custom command to cypress/support/commands.js:',
|
|
270
|
+
'',
|
|
271
|
+
' // testivai-witness-cdp.js',
|
|
272
|
+
' Cypress.Commands.add(\'witness\', (name) => {',
|
|
273
|
+
' return cy.window().invoke(\'testivaiWitness\', name);',
|
|
274
|
+
' });',
|
|
275
|
+
'',
|
|
276
|
+
'2. Use in your tests:',
|
|
277
|
+
'',
|
|
278
|
+
' it(\'should capture visual snapshot\', () => {',
|
|
279
|
+
' cy.visit(\'/my-page\');',
|
|
280
|
+
' cy.witness(\'my-snapshot\');',
|
|
281
|
+
' });',
|
|
282
|
+
'',
|
|
283
|
+
'3. Run tests with:',
|
|
284
|
+
' testivai run "cypress run"',
|
|
285
|
+
'',
|
|
286
|
+
];
|
|
287
|
+
case 'webdriverio':
|
|
288
|
+
return [
|
|
289
|
+
'',
|
|
290
|
+
'To use TestivAI with WebdriverIO:',
|
|
291
|
+
'',
|
|
292
|
+
'1. Add this custom command to your test setup:',
|
|
293
|
+
'',
|
|
294
|
+
' // In wdio.conf.js or test setup',
|
|
295
|
+
' browser.addCommand(\'witness\', function(name) {',
|
|
296
|
+
' return this.executeScript(\'return window.testivaiWitness(arguments[0])\', name);',
|
|
297
|
+
' });',
|
|
298
|
+
'',
|
|
299
|
+
'2. Use in your tests:',
|
|
300
|
+
'',
|
|
301
|
+
' it(\'should capture visual snapshot\', async () => {',
|
|
302
|
+
' await browser.url(\'/my-page\');',
|
|
303
|
+
' await browser.witness(\'my-snapshot\');',
|
|
304
|
+
' });',
|
|
305
|
+
'',
|
|
306
|
+
'3. Run tests with:',
|
|
307
|
+
' testivai run "npx wdio"',
|
|
308
|
+
'',
|
|
309
|
+
];
|
|
310
|
+
case 'selenium-js':
|
|
311
|
+
return [
|
|
312
|
+
'',
|
|
313
|
+
'To use TestivAI with Selenium (JavaScript):',
|
|
314
|
+
'',
|
|
315
|
+
'1. In your tests, use execute_script:',
|
|
316
|
+
'',
|
|
317
|
+
' const { Builder, By } = require(\'selenium-webdriver\');',
|
|
318
|
+
'',
|
|
319
|
+
' async function captureSnapshot(driver, name) {',
|
|
320
|
+
' await driver.executeScript(`return window.testivaiWitness(\'${name}\')`);',
|
|
321
|
+
' }',
|
|
322
|
+
'',
|
|
323
|
+
'2. Use in your tests:',
|
|
324
|
+
'',
|
|
325
|
+
' it(\'should capture visual snapshot\', async () => {',
|
|
326
|
+
' const driver = await new Builder().forBrowser(\'chrome\').build();',
|
|
327
|
+
' await driver.get(\'http://localhost:3000\');',
|
|
328
|
+
' await captureSnapshot(driver, \'my-snapshot\');',
|
|
329
|
+
' });',
|
|
330
|
+
'',
|
|
331
|
+
'3. Run tests with:',
|
|
332
|
+
' testivai run "npm test"',
|
|
333
|
+
'',
|
|
334
|
+
];
|
|
335
|
+
case 'selenium-python':
|
|
336
|
+
return [
|
|
337
|
+
'',
|
|
338
|
+
'To use TestivAI with Selenium (Python):',
|
|
339
|
+
'',
|
|
340
|
+
'1. In your tests, use execute_script:',
|
|
341
|
+
'',
|
|
342
|
+
' from selenium import webdriver',
|
|
343
|
+
'',
|
|
344
|
+
' def capture_snapshot(driver, name):',
|
|
345
|
+
' driver.execute_script(f"return window.testivaiWitness(\'{name}\')")',
|
|
346
|
+
'',
|
|
347
|
+
'2. Use in your tests:',
|
|
348
|
+
'',
|
|
349
|
+
' def test_visual_snapshot():',
|
|
350
|
+
' driver = webdriver.Chrome()',
|
|
351
|
+
' driver.get("http://localhost:3000")',
|
|
352
|
+
' capture_snapshot(driver, "my-snapshot")',
|
|
353
|
+
'',
|
|
354
|
+
'3. Run tests with:',
|
|
355
|
+
' testivai run "pytest tests/"',
|
|
356
|
+
'',
|
|
357
|
+
];
|
|
358
|
+
default:
|
|
359
|
+
return [
|
|
360
|
+
'',
|
|
361
|
+
'No supported testing framework detected.',
|
|
362
|
+
'',
|
|
363
|
+
'To use TestivAI, you need to:',
|
|
364
|
+
'',
|
|
365
|
+
'1. Launch Chrome with remote debugging:',
|
|
366
|
+
' chrome --remote-debugging-port=9222',
|
|
367
|
+
'',
|
|
368
|
+
'2. In your test code, call:',
|
|
369
|
+
' window.testivaiWitness(\'snapshot-name\')',
|
|
370
|
+
'',
|
|
371
|
+
'3. Run your tests with:',
|
|
372
|
+
' testivai run "your-test-command"',
|
|
373
|
+
'',
|
|
374
|
+
];
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
exports.FrameworkDetector = FrameworkDetector;
|
|
379
|
+
//# sourceMappingURL=framework-detect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"framework-detect.js","sourceRoot":"","sources":["../../src/utils/framework-detect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export interface LoggerOptions {
|
|
2
|
+
verbose?: boolean;
|
|
3
|
+
quiet?: boolean;
|
|
4
|
+
debug?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare class Logger {
|
|
7
|
+
private options;
|
|
8
|
+
constructor(options?: LoggerOptions);
|
|
9
|
+
private shouldLog;
|
|
10
|
+
error(message: string, ...args: any[]): void;
|
|
11
|
+
warn(message: string, ...args: any[]): void;
|
|
12
|
+
info(message: string, ...args: any[]): void;
|
|
13
|
+
debug(message: string, ...args: any[]): void;
|
|
14
|
+
success(message: string, ...args: any[]): void;
|
|
15
|
+
verbose(message: string, ...args: any[]): void;
|
|
16
|
+
plain(message: string, ...args: any[]): void;
|
|
17
|
+
capture(snapshotName: string): void;
|
|
18
|
+
upload(batchId: string): void;
|
|
19
|
+
connected(port: number): void;
|
|
20
|
+
disconnected(): void;
|
|
21
|
+
bindingRegistered(bindingName: string): void;
|
|
22
|
+
bindingCalled(bindingName: string, payload?: string): void;
|
|
23
|
+
startProgress(message: string): void;
|
|
24
|
+
updateProgress(message: string): void;
|
|
25
|
+
endProgress(message: string): void;
|
|
26
|
+
}
|
|
27
|
+
export declare const logger: Logger;
|
|
28
|
+
export declare function createLogger(options: LoggerOptions): Logger;
|
|
29
|
+
//# sourceMappingURL=logger.d.ts.map
|