Alex Crichton b66095bcff Avoid logging body text
This was meant for debugging and is otherwise pretty noisy
2018-07-08 08:20:21 -07:00

117 lines
2.9 KiB
JavaScript

const process = require("process");
const { promisify } = require("util");
const { Builder, By, Key, logging, promise, until } = require("selenium-webdriver");
const firefox = require("selenium-webdriver/firefox");
promise.USE_PROMISE_MANAGER = false;
const prefs = new logging.Preferences();
prefs.setLevel(logging.Type.BROWSER, logging.Level.DEBUG);
const opts = new firefox.Options();
opts.headless();
if (process.env.WASM_BINDGEN_FIREFOX_BIN_PATH) {
console.log("Using custom firefox-bin: $WASM_BINDGEN_FIREFOX_BIN_PATH =",
process.env.WASM_BINDGEN_FIREFOX_BIN_PATH);
opts.setBinary(process.env.WASM_BINDGEN_FIREFOX_BIN_PATH);
}
console.log("Using Firefox options:", opts);
const driver = new Builder()
.forBrowser("firefox")
.setFirefoxOptions(opts)
.build();
const SECONDS = 1000;
const MINUTES = 60 * SECONDS;
const start = Date.now();
const timeSinceStart = () => {
const elapsed = Date.now() - start;
const minutes = Math.floor(elapsed / MINUTES);
const seconds = elapsed % MINUTES / SECONDS;
return `${minutes}m${seconds.toFixed(3)}s`;
};
async function logged(msg, promise) {
console.log(`${timeSinceStart()}: START: ${msg}`);
try {
const value = await promise;
console.log(`${timeSinceStart()}: END: ${msg}`);
return value;
} catch (e) {
console.log(`${timeSinceStart()}: ERROR: ${msg}: ${e}\n\n${e.stack}`);
throw e;
}
}
async function main() {
let body;
try {
await logged(
"load http://localhost:8080/index.html",
driver.get("http://localhost:8080/index.html")
);
body = driver.findElement(By.tagName("body"));
await logged(
"Waiting for <body> to include text 'TEST_START'",
driver.wait(
until.elementTextContains(body, "TEST_START"),
1 * MINUTES
)
);
await logged(
"Waiting for <body> to include text 'TEST_DONE'",
driver.wait(
until.elementTextContains(body, "TEST_DONE"),
1 * MINUTES
)
);
const status = await logged(
"get #status text",
body.findElement(By.id("status")).getText()
);
console.log(`Test status is: "${status}"`);
if (status != "good") {
throw new Error(`test failed with status = ${status}`);
}
} finally {
const logs = await logged(
"getting browser logs",
body.findElement(By.id("logs")).getText()
);
if (logs.length > 0) {
console.log("logs:");
logs.split("\n").forEach(line => {
console.log(` ${line}`);
});
}
const errors = await logged(
"getting browser errors",
body.findElement(By.id("error")).getText()
);
if (errors.length > 0) {
console.log("errors:");
errors.split("\n").forEach(line => {
console.log(` ${line}`);
});
}
}
}
main()
.finally(() => driver.quit())
.catch(e => {
console.error(`Got an error: ${e}\n\nStack: ${e.stack}`);
process.exit(1);
});