seleniumService.ts•2.34 kB
import { Builder, WebDriver } from 'selenium-webdriver';
// Remove browser-specific imports entirely
// import * as chrome from 'selenium-webdriver/chrome';
// import * as firefox from 'selenium-webdriver/firefox';
// Basic WebDriver instance management
let driver: WebDriver | null = null;
/**
* Initializes the WebDriver instance without explicit options.
* Relies on WebDriver executable being in PATH.
*/
export async function initializeWebDriver(browser: 'chrome' | 'firefox' = 'chrome'): Promise<WebDriver> {
if (driver) {
console.warn('WebDriver already initialized.');
return driver;
}
try {
console.log(`Initializing WebDriver for ${browser} (auto-detected driver)...`);
// Remove options creation and setting
// const options = browser === 'chrome' ? new chrome.Options() : new firefox.Options();
// Simplify builder - remove setOptions calls
let builder = new Builder().forBrowser(browser);
// If specific service path is needed, that might still require the submodule import
// if (browser === 'chrome') {
// builder.setChromeService(new chrome.ServiceBuilder('/path/to/chromedriver'));
// }
driver = await builder.build();
console.log('WebDriver initialized successfully.');
return driver;
} catch (error) {
console.error('Failed to initialize WebDriver:', error);
// Provide a more helpful error message if it fails here
throw new Error(`WebDriver initialization failed. Ensure ${browser} and its corresponding WebDriver (e.g., chromedriver) are installed and in your system PATH. Error: ${error instanceof Error ? error.message : error}`);
}
}
/**
* Returns the active WebDriver instance.
*/
export function getWebDriver(): WebDriver {
if (!driver) {
throw new Error('WebDriver has not been initialized. Call initializeWebDriver first.');
}
return driver;
}
/**
* Gracefully quits the WebDriver session.
*/
export async function quitWebDriver(): Promise<void> {
if (driver) {
console.log('Shutting down WebDriver...');
try {
await driver.quit();
driver = null;
console.log('WebDriver shut down successfully.');
} catch (error) {
console.error('Error shutting down WebDriver:', error);
}
} else {
console.log('WebDriver not initialized, nothing to shut down.');
}
}