/** * 测试脚本:验证多浏览器架构 * 测试BrowserManager和BrowserFactory的基本功能 */ const BrowserManager = require('./src/shared/libs/browser/browser-manager'); const BrowserFactory = require('./src/shared/libs/browser/factory/browser-factory'); async function testBrowserArchitecture() { console.log('========================================'); console.log('测试多浏览器架构'); console.log('========================================\n'); // ============ 测试 1: BrowserFactory ============ console.log('【测试 1】BrowserFactory 功能'); console.log(''); try { // 1.1 获取可用提供商 const providers = BrowserFactory.getAvailableProviders(); console.log('✅ 可用提供商:', providers); // 1.2 获取元数据 const metadata = BrowserFactory.getAllProvidersMetadata(); console.log('✅ 提供商元数据:'); metadata.forEach(meta => { console.log(` - ${meta.name} (${meta.id})`); console.log(` 免费: ${meta.free ? '是' : '否'}`); console.log(` 能力:`, meta.capabilities); }); // 1.3 查找免费提供商 const freeProviders = BrowserFactory.getFreeProviders(); console.log('✅ 免费提供商:', freeProviders.length > 0 ? freeProviders : '暂无'); // 1.4 查找付费提供商 const paidProviders = BrowserFactory.getPaidProviders(); console.log('✅ 付费提供商:', paidProviders); // 1.5 按能力查找 const cloudflareProviders = BrowserFactory.findProvidersByCapability('cloudflareBypass'); console.log('✅ 支持Cloudflare绕过的提供商:', cloudflareProviders); console.log('\n【测试 1】✅ 通过\n'); } catch (error) { console.error('\n【测试 1】❌ 失败:', error.message); process.exit(1); } // ============ 测试 2: BrowserManager 向后兼容性 ============ console.log('【测试 2】BrowserManager 向后兼容性'); console.log(''); try { // 2.1 默认创建(应该使用 AdsPower) const browser = new BrowserManager({ siteName: 'Test' }); console.log('✅ BrowserManager 创建成功'); console.log(' 当前提供商:', browser.getProviderName()); console.log(' 提供商元数据:', browser.getProviderMetadata()); console.log('\n【测试 2】✅ 通过\n'); } catch (error) { console.error('\n【测试 2】❌ 失败:', error.message); process.exit(1); } // ============ 测试 3: 显式指定提供商 ============ console.log('【测试 3】显式指定提供商'); console.log(''); try { // 3.1 显式使用 AdsPower const adsBrowser = new BrowserManager({ provider: 'adspower', siteName: 'AdsPowerTest' }); console.log('✅ AdsPower提供商创建成功'); console.log(' 提供商名称:', adsBrowser.getProviderName()); console.log('\n【测试 3】✅ 通过\n'); } catch (error) { console.error('\n【测试 3】❌ 失败:', error.message); process.exit(1); } // ============ 测试 4: 错误处理 ============ console.log('【测试 4】错误处理'); console.log(''); try { // 4.1 尝试使用不存在的提供商 try { const invalidBrowser = new BrowserManager({ provider: 'non-existent-provider' }); console.error('❌ 应该抛出错误但没有'); } catch (e) { console.log('✅ 正确处理了无效提供商:', e.message.split('\n')[0]); } console.log('\n【测试 4】✅ 通过\n'); } catch (error) { console.error('\n【测试 4】❌ 失败:', error.message); process.exit(1); } // ============ 测试总结 ============ console.log('========================================'); console.log('✅ 所有测试通过!'); console.log('========================================'); console.log(''); console.log('架构验证成功:'); console.log(' ✅ 策略模式正常工作'); console.log(' ✅ 工厂模式正常工作'); console.log(' ✅ 向后兼容性保持'); console.log(' ✅ 错误处理正确'); console.log(''); console.log('下一步:'); console.log(' 1. 添加更多免费浏览器提供商'); console.log(' 2. 创建CLI工具'); console.log(' 3. 编写集成测试'); console.log(''); } // 运行测试 testBrowserArchitecture().catch(error => { console.error('\n测试失败:', error); process.exit(1); });