diff --git a/dockers/Screenshotter/screenshotter.js b/dockers/Screenshotter/screenshotter.js
index 968a7176..2a71709b 100644
--- a/dockers/Screenshotter/screenshotter.js
+++ b/dockers/Screenshotter/screenshotter.js
@@ -65,6 +65,10 @@ const opts = require("nomnom")
abbr: "x",
help: "Comma-separated list of test cases to exclude",
})
+ .option("reload", {
+ flag: true,
+ help: "Reload page for each test",
+ })
.option("verify", {
flag: true,
help: "Check whether screenshot matches current file content",
@@ -226,6 +230,7 @@ function tryConnect() {
// Build the web driver
let driver;
+let driverReady = false;
function buildDriver() {
const builder = new selenium.Builder().forBrowser(opts.browser);
const ffProfile = new firefox.Profile();
@@ -372,16 +377,32 @@ function takeScreenshot(key) {
}
const url = katexURL + "test/screenshotter/test.html?" + itm.query;
- driver.get(url);
- if (opts.wait) {
- browserSideWait(1000 * opts.wait);
+ driver.call(loadMath);
+
+ function loadMath() {
+ if (!opts.reload && driverReady) {
+ driver.executeAsyncScript(
+ "var callback = arguments[arguments.length - 1]; " +
+ "handle_search_string(" +
+ JSON.stringify("?" + itm.query) + ", callback);")
+ .then(waitThenScreenshot);
+ } else {
+ driver.get(url).then(waitThenScreenshot);
+ }
+ }
+
+ function waitThenScreenshot() {
+ driverReady = true;
+ if (opts.wait) {
+ browserSideWait(1000 * opts.wait);
+ }
+ driver.takeScreenshot().then(haveScreenshot).then(oneDone, check);
}
- driver.takeScreenshot().then(haveScreenshot).then(oneDone, check);
function haveScreenshot(img) {
img = imageDimensions(img);
if (img.width !== targetW || img.height !== targetH) {
- throw new Error("Excpected " + targetW + " x " + targetH +
+ throw new Error("Expected " + targetW + " x " + targetH +
", got " + img.width + "x" + img.height);
}
if (key === "Lap" && opts.browser === "firefox" &&
@@ -411,9 +432,11 @@ function takeScreenshot(key) {
exitStatus = 3;
} else {
console.log("error " + key);
- driver.get(url);
- browserSideWait(500 * retry);
- return driver.takeScreenshot().then(haveScreenshot);
+ browserSideWait(300 * retry);
+ if (retry > 1) {
+ driverReady = false; // reload fully
+ }
+ return driver.call(loadMath);
}
} else {
console.log("* ok " + key);
diff --git a/test/screenshotter/test.html b/test/screenshotter/test.html
index b046e42a..38aa0161 100644
--- a/test/screenshotter/test.html
+++ b/test/screenshotter/test.html
@@ -32,31 +32,40 @@