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