auto-account-machine/test-browser-architecture.js
2025-11-21 14:14:55 +08:00

134 lines
4.3 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 测试脚本:验证多浏览器架构
* 测试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);
});