UNPKG

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
"use strict"; 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