Bug 1302707 - Make GeckoDriver#timeouts spec compatible; r?automatedtester
MozReview-Commit-ID: 7vLVbKKuZNV
--- a/testing/marionette/driver.js
+++ b/testing/marionette/driver.js
@@ -1530,40 +1530,58 @@ GeckoDriver.prototype.switchToFrame = fu
yield browserListening;
}
}
};
/**
* Set timeout for page loading, searching, and scripts.
*
- * @param {string} type
- * Type of timeout.
- * @param {number} ms
- * Timeout in milliseconds.
+ * @param {Object.<string, number>}
+ * Dictionary of timeout types and their new value, where all timeout
+ * types are optional.
+ *
+ * @throws {InvalidArgumentError}
+ * If timeout type key is unknown, or the value provided with it is
+ * not an integer.
*/
GeckoDriver.prototype.timeouts = function(cmd, resp) {
- let typ = cmd.parameters.type;
- let ms = parseInt(cmd.parameters.ms);
- if (isNaN(ms)) {
- throw new WebDriverError("Not a Number");
+ // backwards compatibility with old API
+ // that accepted a dictionary {type: <string>, ms: <number>}
+ let timeouts = {};
+ if (typeof cmd.parameters == "object" &&
+ "type" in cmd.parameters &&
+ "ms" in cmd.parameters) {
+ logger.warn("Using deprecated data structure for setting timeouts");
+ timeouts = {[cmd.parameters.type]: parseInt(cmd.parameters.ms)};
+ } else {
+ timeouts = cmd.parameters;
}
- switch (typ) {
- case "implicit":
- this.setSearchTimeout(cmd, resp);
- break;
+ for (let [typ, ms] of Object.entries(timeouts)) {
+ if (!Number.isInteger(ms)) {
+ throw new InvalidArgumentError();
+ }
+
+ switch (typ) {
+ case "implicit":
+ this.searchTimeout = ms;
+ break;
- case "script":
- this.setScriptTimeout(cmd, resp);
- break;
+ case "script":
+ this.scriptTimeout = ms;
+ break;
- default:
- this.pageTimeout = ms;
- break;
+ case "page load":
+ this.pageTimeout = ms;
+ break;
+
+ default:
+ throw new InvalidArgumentError();
+ }
}
};
/** Single tap. */
GeckoDriver.prototype.singleTap = function*(cmd, resp) {
let {id, x, y} = cmd.parameters;
switch (this.context) {