Upload files to "qkf"
This commit is contained in:
64
qkf/driverFactory.js
Normal file
64
qkf/driverFactory.js
Normal file
@@ -0,0 +1,64 @@
|
||||
// qkf/selenium/driverFactory.js
|
||||
const { Builder } = require("selenium-webdriver");
|
||||
|
||||
function envBool(v, def = false) {
|
||||
if (v == null) return def;
|
||||
return String(v).toLowerCase() === "true" || String(v) === "1";
|
||||
}
|
||||
|
||||
/**
|
||||
* Driver factory:
|
||||
* - Local: uses selenium-webdriver Builder().forBrowser()
|
||||
* - Remote: if SELENIUM_REMOTE_URL is set, uses .usingServer(url)
|
||||
*
|
||||
* Env:
|
||||
* - QKF_BROWSER=chrome|firefox|MicrosoftEdge
|
||||
* - QKF_HEADLESS=true|false
|
||||
* - SELENIUM_REMOTE_URL=http://localhost:4444/wd/hub (optional)
|
||||
*/
|
||||
async function createDriver() {
|
||||
const browser = process.env.QKF_BROWSER || "chrome";
|
||||
const headless = envBool(process.env.QKF_HEADLESS, false);
|
||||
const remoteUrl = process.env.SELENIUM_REMOTE_URL || "";
|
||||
|
||||
const builder = new Builder().forBrowser(browser);
|
||||
|
||||
if (remoteUrl) builder.usingServer(remoteUrl);
|
||||
|
||||
// Headless options (best-effort; safe if missing)
|
||||
try {
|
||||
if (browser.toLowerCase() === "chrome") {
|
||||
const chrome = require("selenium-webdriver/chrome");
|
||||
const opts = new chrome.Options();
|
||||
if (headless) opts.addArguments("--headless=new");
|
||||
opts.addArguments("--window-size=1440,900");
|
||||
builder.setChromeOptions(opts);
|
||||
} else if (browser.toLowerCase() === "firefox") {
|
||||
const firefox = require("selenium-webdriver/firefox");
|
||||
const opts = new firefox.Options();
|
||||
if (headless) opts.addArguments("-headless");
|
||||
builder.setFirefoxOptions(opts);
|
||||
} else if (browser.toLowerCase().includes("edge")) {
|
||||
const edge = require("selenium-webdriver/edge");
|
||||
const opts = new edge.Options();
|
||||
if (headless) opts.addArguments("--headless=new");
|
||||
opts.addArguments("--window-size=1440,900");
|
||||
builder.setEdgeOptions(opts);
|
||||
}
|
||||
} catch {
|
||||
// If browser-specific options modules aren't available, continue without them.
|
||||
}
|
||||
|
||||
const driver = await builder.build();
|
||||
|
||||
// Default timeouts (adjust as needed)
|
||||
await driver.manage().setTimeouts({
|
||||
implicit: 0,
|
||||
pageLoad: 60000,
|
||||
script: 30000
|
||||
});
|
||||
|
||||
return driver;
|
||||
}
|
||||
|
||||
module.exports = { createDriver };
|
||||
Reference in New Issue
Block a user