stock-bot/test-browser-simple.ts
2025-06-12 08:03:09 -04:00

166 lines
4.5 KiB
TypeScript

/**
* Simple Browser and Network Monitoring Test
*/
import { Browser } from '@stock-bot/browser';
async function testBasicBrowser() {
console.log('🚀 Testing basic browser functionality...');
try {
// Initialize browser
await Browser.initialize({
headless: true,
timeout: 15000,
blockResources: false,
enableNetworkLogging: true,
});
console.log('✅ Browser initialized');
// Test 1: Simple page without proxy
console.log('📄 Testing simple page without proxy...');
const { page, contextId } = await Browser.createPageWithProxy(
'https://httpbin.org/json'
);
let capturedData = null;
let eventCount = 0;
page.onNetworkEvent(event => {
eventCount++;
console.log(`📡 Event ${eventCount}: ${event.type} - ${event.method} ${event.url}`);
if (event.type === 'response' && event.url.includes('httpbin.org/json')) {
console.log(` 📊 Status: ${event.status}`);
if (event.responseData) {
capturedData = event.responseData;
console.log(` 📝 Response: ${event.responseData}`);
}
}
});
await page.waitForLoadState('domcontentloaded');
await new Promise(resolve => setTimeout(resolve, 2000));
console.log(`✅ Test completed. Events captured: ${eventCount}`);
if (capturedData) {
console.log('✅ Successfully captured response data');
}
await Browser.closeContext(contextId);
return true;
} catch (error) {
console.error('❌ Basic test failed:', error);
return false;
} finally {
await Browser.close();
}
}
async function testProxyConnection() {
console.log('\n🔄 Testing proxy connection...');
try {
await Browser.initialize({
headless: true,
timeout: 10000,
blockResources: false,
});
// Test different proxy formats
const proxyConfigs = [
null, // No proxy
'http://doimvbnb-US-rotate:w5fpiwrb9895@p.webshare.io:80',
];
for (const proxy of proxyConfigs) {
console.log(`\n🌐 Testing with proxy: ${proxy || 'No proxy'}`);
try {
const { page, contextId } = await Browser.createPageWithProxy(
'https://httpbin.org/ip',
proxy
);
page.onNetworkEvent(event => {
if (event.type === 'response' && event.url.includes('httpbin.org/ip')) {
console.log(` 📍 IP Response: ${event.responseData}`);
}
});
await page.waitForLoadState('domcontentloaded');
await new Promise(resolve => setTimeout(resolve, 1500));
await Browser.closeContext(contextId);
console.log(' ✅ Success');
} catch (error) {
console.log(` ❌ Failed: ${error.message}`);
}
}
} catch (error) {
console.error('❌ Proxy test setup failed:', error);
} finally {
await Browser.close();
}
}
async function testIBWithWorkaround() {
console.log('\n🏦 Testing IB endpoint with workaround...');
try {
await Browser.initialize({
headless: true,
timeout: 20000,
blockResources: true, // Block resources for performance
});
// Try without proxy first
console.log('🌐 Attempting IB without proxy...');
try {
const { page, contextId } = await Browser.createPageWithProxy(
'https://www.interactivebrokers.com'
);
let responseCount = 0;
page.onNetworkEvent(event => {
if (event.type === 'response') {
responseCount++;
console.log(` 📥 Response ${responseCount}: ${event.status} ${event.url}`);
}
});
await page.waitForLoadState('domcontentloaded');
await new Promise(resolve => setTimeout(resolve, 3000));
console.log(`✅ IB main page loaded. Responses: ${responseCount}`);
await Browser.closeContext(contextId);
} catch (error) {
console.log(`❌ IB without proxy failed: ${error.message}`);
}
} catch (error) {
console.error('❌ IB test failed:', error);
} finally {
await Browser.close();
}
}
// Run tests
async function runAllTests() {
console.log('🧪 Starting Browser Network Monitoring Tests\n');
const basicResult = await testBasicBrowser();
await testProxyConnection();
await testIBWithWorkaround();
console.log(`\n🏁 Basic functionality: ${basicResult ? '✅ PASS' : '❌ FAIL'}`);
console.log('✅ All tests completed!');
}
if (import.meta.main) {
runAllTests().catch(console.error);
}
export { testBasicBrowser, testProxyConnection, testIBWithWorkaround };