auto-account-machine/browser-automation-ts/tests/windsurf-test.ts
2025-11-21 17:59:49 +08:00

125 lines
3.7 KiB
TypeScript

/**
* Windsurf Workflow 测试
* 使用新的TypeScript架构测试旧的YAML workflow
*/
import * as fs from 'fs';
import * as path from 'path';
import * as yaml from 'js-yaml';
import { AdsPowerProvider } from '../src/providers/adspower/AdsPowerProvider';
import { WorkflowEngine } from '../src/workflow/WorkflowEngine';
interface WindsurfConfig {
site: string;
workflow: any[];
errorHandling?: any;
}
async function runWindsurfWorkflow() {
console.log('🚀 Starting Windsurf Workflow Test...\n');
// 1. 读取YAML配置
const configPath = path.join(__dirname, '../configs/sites/windsurf.yaml');
console.log(`📄 Loading config from: ${configPath}`);
if (!fs.existsSync(configPath)) {
console.error('❌ Config file not found!');
console.log('Please copy windsurf.yaml to: browser-automation-ts/configs/sites/windsurf.yaml');
process.exit(1);
}
const configContent = fs.readFileSync(configPath, 'utf8');
const config = yaml.load(configContent) as WindsurfConfig;
console.log(`✅ Loaded workflow with ${config.workflow.length} steps\n`);
// 2. 初始化AdsPower Provider
console.log('🌐 Initializing AdsPower Provider...');
const provider = new AdsPowerProvider({
profileId: process.env.ADSPOWER_USER_ID,
siteName: 'Windsurf'
});
try {
// 3. 启动浏览器
const result = await provider.launch();
console.log('✅ Browser launched successfully\n');
// 4. 准备Context
const context = {
page: result.page,
browser: result.browser,
logger: console,
data: {
// 可以从环境变量或其他地方加载账号数据
account: {
email: process.env.WINDSURF_EMAIL || 'test@example.com',
password: process.env.WINDSURF_PASSWORD || 'password123'
}
},
siteConfig: {
url: 'https://codeium.com',
name: 'Windsurf'
},
config: config,
siteName: 'Windsurf'
};
// 5. 创建WorkflowEngine
const engine = new WorkflowEngine(
config.workflow,
context,
provider.getActionFactory()
);
// 6. 执行Workflow
console.log('▶️ Starting workflow execution...\n');
const workflowResult = await engine.execute();
// 7. 输出结果
console.log('\n' + '='.repeat(60));
console.log('📊 Workflow Execution Summary');
console.log('='.repeat(60));
console.log(`Status: ${workflowResult.success ? '✅ SUCCESS' : '❌ FAILED'}`);
console.log(`Steps Completed: ${workflowResult.steps}/${config.workflow.length}`);
console.log(`Duration: ${(workflowResult.duration / 1000).toFixed(2)}s`);
console.log(`Errors: ${workflowResult.errors.length}`);
if (workflowResult.errors.length > 0) {
console.log('\n❌ Errors:');
workflowResult.errors.forEach((err: any, i: number) => {
console.log(` ${i + 1}. Step ${err.step} (${err.name}): ${err.error}`);
});
}
console.log('='.repeat(60) + '\n');
// 8. 等待查看结果
console.log('⏸️ Waiting 5 seconds before closing...');
await new Promise(resolve => setTimeout(resolve, 5000));
} catch (error: any) {
console.error('\n❌ Fatal error:', error.message);
console.error(error.stack);
} finally {
// 9. 关闭浏览器
try {
console.log('\n🔒 Closing browser...');
await provider.close();
console.log('✅ Browser closed successfully');
} catch (e: any) {
console.error('⚠️ Error closing browser:', e.message);
}
}
}
// 运行测试
runWindsurfWorkflow()
.then(() => {
console.log('\n✅ Test completed!');
process.exit(0);
})
.catch((error) => {
console.error('\n❌ Test failed:', error);
process.exit(1);
});