testgenius-ai
Version:
๐ TestGenius AI - The Ultimate E2E Testing Framework for Everyone | No Coding Required โข AI-Powered Automation โข Beautiful Reports โข Zero Complexity
289 lines โข 12.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.InternetTestRunner = void 0;
const TestRunner_1 = require("../framework/core/TestRunner");
const AITestExecutor_1 = require("../framework/core/AITestExecutor");
const ConfigManager_1 = require("../framework/core/ConfigManager");
const ReportGenerator_1 = require("../framework/core/ReportGenerator");
const TestSessionManager_1 = require("../framework/core/TestSessionManager");
const CleanupManager_1 = require("../framework/core/CleanupManager");
const the_internet_tests_1 = require("./the-internet-tests");
class InternetTestRunner {
constructor() {
this.configManager = new ConfigManager_1.ConfigManager();
this.aiExecutor = new AITestExecutor_1.AITestExecutor();
this.testRunner = new TestRunner_1.TestRunner();
this.reportGenerator = new ReportGenerator_1.ReportGenerator();
this.sessionManager = new TestSessionManager_1.TestSessionManager();
this.cleanupManager = new CleanupManager_1.CleanupManager();
}
async loadConfig() {
if (!this.config) {
this.config = await this.configManager.loadConfig();
}
}
getInternetConfig() {
return this.config?.theInternet || {
baseUrl: 'https://the-internet.herokuapp.com',
username: 'tomsmith',
password: 'SuperSecretPassword!'
};
}
async runAllTests() {
await this.loadConfig();
const internetConfig = this.getInternetConfig();
console.log('๐ TestGenius AI - Running The Internet Test Suite');
console.log('๐ Testing Site:', internetConfig.baseUrl);
console.log('๐ง Using environment variables from .env file');
console.log('='.repeat(60));
const tests = [
the_internet_tests_1.FORM_AUTHENTICATION_TEST,
the_internet_tests_1.CHECKBOXES_TEST,
the_internet_tests_1.DROPDOWN_TEST,
the_internet_tests_1.DYNAMIC_CONTENT_TEST,
the_internet_tests_1.FILE_UPLOAD_TEST,
the_internet_tests_1.JAVASCRIPT_ALERTS_TEST,
the_internet_tests_1.ADD_REMOVE_ELEMENTS_TEST,
the_internet_tests_1.HOVERS_TEST,
the_internet_tests_1.KEY_PRESSES_TEST,
the_internet_tests_1.SLOW_RESOURCES_TEST,
the_internet_tests_1.BROKEN_IMAGES_TEST,
the_internet_tests_1.CHALLENGING_DOM_TEST
];
// Update test data with environment variables
const updatedTests = tests.map(test => {
if (test.id === 'INTERNET-001') {
return {
...test,
testData: {
username: internetConfig.username,
password: internetConfig.password
}
};
}
return test;
});
const sessionId = `internet-tests-${Date.now()}`;
const results = [];
for (const test of updatedTests) {
console.log(`\n๐งช Running Test: ${test.name}`);
console.log(`๐ Description: ${test.description}`);
console.log(`๐ URL: ${test.site}`);
console.log(`๐ท๏ธ Tags: ${test.tags.join(', ')}`);
try {
// Use the TestRunner's run method with the test ID
await this.testRunner.run(test.id);
// For now, we'll assume success since the run method handles the execution
results.push({
testId: test.id,
testName: test.name,
success: true,
duration: 0,
timestamp: new Date().toISOString()
});
console.log(`โ
Test PASSED: ${test.name}`);
}
catch (error) {
console.log(`โ Test FAILED: ${test.name}`);
console.log(` Error: ${error}`);
results.push({
testId: test.id,
testName: test.name,
success: false,
error: error instanceof Error ? error.message : String(error),
duration: 0,
timestamp: new Date().toISOString()
});
}
}
// Generate report using the correct method
await this.reportGenerator.generate();
console.log('\n' + '='.repeat(60));
console.log('๐ Test Results Summary:');
console.log(` Total Tests: ${updatedTests.length}`);
console.log(` Passed: ${results.filter(r => r.success).length}`);
console.log(` Failed: ${results.filter(r => !r.success).length}`);
console.log(` Success Rate: ${((results.filter(r => r.success).length / updatedTests.length) * 100).toFixed(1)}%`);
console.log(`๐พ Session saved: ${sessionId}`);
}
async runSpecificTest(testId) {
await this.loadConfig();
const internetConfig = this.getInternetConfig();
const tests = [
the_internet_tests_1.FORM_AUTHENTICATION_TEST,
the_internet_tests_1.CHECKBOXES_TEST,
the_internet_tests_1.DROPDOWN_TEST,
the_internet_tests_1.DYNAMIC_CONTENT_TEST,
the_internet_tests_1.FILE_UPLOAD_TEST,
the_internet_tests_1.JAVASCRIPT_ALERTS_TEST,
the_internet_tests_1.ADD_REMOVE_ELEMENTS_TEST,
the_internet_tests_1.HOVERS_TEST,
the_internet_tests_1.KEY_PRESSES_TEST,
the_internet_tests_1.SLOW_RESOURCES_TEST,
the_internet_tests_1.BROKEN_IMAGES_TEST,
the_internet_tests_1.CHALLENGING_DOM_TEST
];
const test = tests.find(t => t.id === testId);
if (!test) {
console.error(`โ Test with ID ${testId} not found`);
return;
}
// Update test data with environment variables if it's the authentication test
let updatedTest = test;
if (testId === 'INTERNET-001') {
updatedTest = {
...test,
testData: {
username: internetConfig.username,
password: internetConfig.password
}
};
}
console.log(`๐งช Running Single Test: ${updatedTest.name}`);
console.log(`๐ Description: ${updatedTest.description}`);
console.log(`๐ URL: ${updatedTest.site}`);
console.log(`๐ง Using environment variables from .env file`);
try {
await this.testRunner.run(updatedTest.id);
console.log(`โ
Test PASSED: ${updatedTest.name}`);
}
catch (error) {
console.log(`โ Test FAILED: ${updatedTest.name}`);
console.log(` Error: ${error}`);
}
// Generate report
await this.reportGenerator.generate();
}
async runTestsByTag(tag) {
await this.loadConfig();
const internetConfig = this.getInternetConfig();
const tests = [
the_internet_tests_1.FORM_AUTHENTICATION_TEST,
the_internet_tests_1.CHECKBOXES_TEST,
the_internet_tests_1.DROPDOWN_TEST,
the_internet_tests_1.DYNAMIC_CONTENT_TEST,
the_internet_tests_1.FILE_UPLOAD_TEST,
the_internet_tests_1.JAVASCRIPT_ALERTS_TEST,
the_internet_tests_1.ADD_REMOVE_ELEMENTS_TEST,
the_internet_tests_1.HOVERS_TEST,
the_internet_tests_1.KEY_PRESSES_TEST,
the_internet_tests_1.SLOW_RESOURCES_TEST,
the_internet_tests_1.BROKEN_IMAGES_TEST,
the_internet_tests_1.CHALLENGING_DOM_TEST
];
const filteredTests = tests.filter(test => test.tags.includes(tag));
if (filteredTests.length === 0) {
console.error(`โ No tests found with tag: ${tag}`);
return;
}
// Update test data with environment variables
const updatedTests = filteredTests.map(test => {
if (test.id === 'INTERNET-001') {
return {
...test,
testData: {
username: internetConfig.username,
password: internetConfig.password
}
};
}
return test;
});
console.log(`๐ท๏ธ Running Tests with Tag: ${tag}`);
console.log(`๐ Found ${updatedTests.length} tests`);
console.log(`๐ง Using environment variables from .env file`);
for (const test of updatedTests) {
console.log(`\n๐งช Running: ${test.name}`);
try {
await this.testRunner.run(test.id);
console.log(`โ
PASSED: ${test.name}`);
}
catch (error) {
console.log(`โ FAILED: ${test.name}`);
}
}
// Generate report
await this.reportGenerator.generate();
}
async listAvailableTests() {
await this.loadConfig();
const internetConfig = this.getInternetConfig();
const tests = [
the_internet_tests_1.FORM_AUTHENTICATION_TEST,
the_internet_tests_1.CHECKBOXES_TEST,
the_internet_tests_1.DROPDOWN_TEST,
the_internet_tests_1.DYNAMIC_CONTENT_TEST,
the_internet_tests_1.FILE_UPLOAD_TEST,
the_internet_tests_1.JAVASCRIPT_ALERTS_TEST,
the_internet_tests_1.ADD_REMOVE_ELEMENTS_TEST,
the_internet_tests_1.HOVERS_TEST,
the_internet_tests_1.KEY_PRESSES_TEST,
the_internet_tests_1.SLOW_RESOURCES_TEST,
the_internet_tests_1.BROKEN_IMAGES_TEST,
the_internet_tests_1.CHALLENGING_DOM_TEST
];
console.log('๐ Available Tests for The Internet Site:');
console.log('='.repeat(80));
console.log(`๐ Base URL: ${internetConfig.baseUrl}`);
console.log(`๐ง Environment: ${this.config?.test?.defaultEnvironment || 'staging'}`);
console.log(`๐ Browser: ${this.config?.browser?.defaultBrowser || 'chrome'}`);
console.log(`๐ป Headless: ${this.config?.browser?.headless ? 'Yes' : 'No'}`);
console.log('='.repeat(80));
tests.forEach(test => {
console.log(`\n๐ ${test.id}`);
console.log(`๐ ${test.name}`);
console.log(` ${test.description}`);
console.log(`๐ ${test.site}`);
console.log(`๐ท๏ธ Tags: ${test.tags.join(', ')}`);
console.log(`โก Priority: ${test.priority}`);
});
console.log('\n' + '='.repeat(80));
console.log(`Total Tests: ${tests.length}`);
console.log(`Environment variables loaded from .env file`);
}
}
exports.InternetTestRunner = InternetTestRunner;
// CLI Interface
async function main() {
const runner = new InternetTestRunner();
const args = process.argv.slice(2);
if (args.length === 0) {
console.log('TestGenius AI - The Internet Test Runner');
console.log('\nUsage:');
console.log(' npm run test:internet # Run all tests');
console.log(' npm run test:internet --list # List available tests');
console.log(' npm run test:internet --test INTERNET-001 # Run specific test');
console.log(' npm run test:internet --tag forms # Run tests by tag');
console.log('\nAvailable tags: authentication, forms, interaction, dynamic, javascript, file, keyboard, performance, images, dom');
console.log('\nEnvironment variables are automatically loaded from .env file');
return;
}
const command = args[0];
switch (command) {
case '--list':
await runner.listAvailableTests();
break;
case '--test':
if (args[1]) {
await runner.runSpecificTest(args[1]);
}
else {
console.error('โ Please provide a test ID');
}
break;
case '--tag':
if (args[1]) {
await runner.runTestsByTag(args[1]);
}
else {
console.error('โ Please provide a tag');
}
break;
default:
await runner.runAllTests();
}
}
if (require.main === module) {
main().catch(console.error);
}
//# sourceMappingURL=run-internet-tests.js.map