docs
evals
scenario-1
scenario-10
scenario-2
scenario-3
scenario-4
scenario-5
scenario-6
scenario-7
scenario-8
scenario-9
A utility that connects to a browser instance and provides intelligent filtering and management of browser targets.
The implementation should provide a class or functions that:
/**
* Configuration for target filtering
*/
export interface TargetFilterConfig {
/**
* Target types to include (e.g., 'page', 'worker', 'service_worker', 'browser')
*/
allowedTypes?: string[];
/**
* Whether to exclude DevTools targets
*/
excludeDevTools?: boolean;
/**
* Custom function to determine if a target should be treated as a page
*/
isPageTarget?: (target: any) => boolean;
}
/**
* Manages browser targets with custom filtering
*/
export class TargetManager {
/**
* Creates a new TargetManager
* @param browserWSEndpoint - WebSocket endpoint of the browser to connect to
* @param config - Configuration for target filtering
*/
constructor(browserWSEndpoint: string, config: TargetFilterConfig);
/**
* Connects to the browser and retrieves filtered targets
* @returns Array of filtered target objects
*/
async getFilteredTargets(): Promise<any[]>;
/**
* Closes the browser connection
*/
async close(): Promise<void>;
}Provides browser automation and control capabilities.
// Launch a browser with multiple targets
const browser = await puppeteer.launch();
const page1 = await browser.newPage();
await page1.goto('https://example.com');
const page2 = await browser.newPage();
await page2.goto('https://example.org');
// Create target manager that filters only page targets
const manager = new TargetManager(browser.wsEndpoint(), {
allowedTypes: ['page']
});
const targets = await manager.getFilteredTargets();
// Should only include page targets
expect(targets.length).toBeGreaterThan(0);
expect(targets.every(t => t.type() === 'page')).toBe(true);
await manager.close();
await browser.close();// Launch a browser
const browser = await puppeteer.launch({ devtools: true });
const page = await browser.newPage();
// Create target manager that excludes DevTools
const manager = new TargetManager(browser.wsEndpoint(), {
excludeDevTools: true
});
const targets = await manager.getFilteredTargets();
// Should not include any DevTools targets
expect(targets.every(t => t.url().indexOf('devtools://') === -1)).toBe(true);
await manager.close();
await browser.close();// Launch a browser
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://example.com/app');
// Create target manager with custom page detection (only URLs containing '/app')
const manager = new TargetManager(browser.wsEndpoint(), {
isPageTarget: (target) => {
return target.url().includes('/app');
}
});
const targets = await manager.getFilteredTargets();
// Should only include targets with '/app' in URL
expect(targets.length).toBeGreaterThan(0);
expect(targets.every(t => t.url().includes('/app'))).toBe(true);
await manager.close();
await browser.close();// Launch a browser and create different target types
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://example.com');
// Page creates a service worker
await page.evaluate(() => {
navigator.serviceWorker.register('/sw.js');
});
// Create target manager
const manager = new TargetManager(browser.wsEndpoint(), {
allowedTypes: ['page']
});
const targets = await manager.getFilteredTargets();
// Should correctly identify and filter page targets only
expect(targets.every(t => t.type() === 'page')).toBe(true);
await manager.close();
await browser.close();