-
Notifications
You must be signed in to change notification settings - Fork 94
Expand file tree
/
Copy pathhelper.mjs
More file actions
101 lines (89 loc) · 3.14 KB
/
helper.mjs
File metadata and controls
101 lines (89 loc) · 3.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import commandLineUsage from "command-line-usage";
import commandLineArgs from "command-line-args";
import serve from "./server.mjs";
import firefox from "selenium-webdriver/firefox.js";
import chrome from "selenium-webdriver/chrome.js";
import edge from "selenium-webdriver/edge.js";
import LogInspector from "selenium-webdriver/bidi/logInspector.js";
import { Builder } from "selenium-webdriver";
const optionDefinitions = [
{ name: "browser", type: String, description: "Set the browser to test, choices are [safari, firefox, chrome]. By default the $BROWSER env variable is used." },
{ name: "port", type: Number, defaultValue: 8010, description: "Set the test-server port, The default value is 8010." },
{ name: "help", alias: "h", description: "Print this help text." },
];
function printHelp(message = "", exitStatus = 0) {
const usage = commandLineUsage([
{
header: "Run all tests",
},
{
header: "Options",
optionList: optionDefinitions,
},
]);
if (message) {
console.error(message);
console.error();
}
console.log(usage);
process.exit(exitStatus);
}
export default async function testSetup(helpText) {
const options = commandLineArgs(optionDefinitions);
if ("help" in options)
printHelp(helpText);
const BROWSER = options?.browser;
if (!BROWSER)
printHelp("No browser specified, use $BROWSER or --browser", 1);
let builder;
switch (BROWSER) {
case "safari": {
builder = new Builder().forBrowser(BROWSER);
// No bidi and log support in safari.
break;
}
case "firefox": {
builder = new Builder().forBrowser(BROWSER).setFirefoxOptions(new firefox.Options().enableBidi());
break;
}
case "chrome": {
builder = new Builder().forBrowser(BROWSER).setChromeOptions(new chrome.Options().enableBidi());
break;
}
case "edge": {
builder = new Builder().forBrowser(BROWSER).setEdgeOptions(new edge.Options().enableBidi());
break;
}
default: {
printHelp(`Invalid browser "${BROWSER}", choices are: "safari", "firefox", "chrome", "edge"`);
}
}
const PORT = options.port;
const server = await serve(PORT);
let driver, logInspector;
process.on("unhandledRejection", (err) => {
console.error(err);
process.exit(1);
});
process.once("uncaughtException", (err) => {
console.error(err);
process.exit(1);
});
process.on("exit", () => stop());
driver = await builder.build();
driver.manage().window().setRect({ width: 1200, height: 1000 });
if (BROWSER !== "safari") {
logInspector = await LogInspector(driver);
await logInspector.onConsoleEntry((log) => {
console.log(`${log.type}.${log.level}`.toUpperCase(), log.text);
});
}
async function stop() {
server.close();
if (logInspector)
await logInspector.close();
if (driver)
driver.close();
}
return { driver, PORT, stop };
}