webdriverio-automation
Version:
WebdriverIO-Automation android ios project
43 lines (34 loc) • 1.42 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = executeScript;
var _executeScript = _interopRequireDefault(require("../scripts/executeScript"));
var _utils = require("../utils");
var _constants = require("../constants");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
async function executeScript({
script,
args
}) {
const page = this.getPageHandle(true);
const scriptTimeout = this.timeouts.get('script');
script = script.trim();
if (script.startsWith('return (')) {
script = script.slice(7);
}
if (script.startsWith('return')) {
script = `(function () { ${script} }).apply(null, arguments)`;
}
const executePromise = page.$eval('html', _executeScript.default, script, _constants.SERIALIZE_PROPERTY, _constants.SERIALIZE_FLAG, ..._utils.transformExecuteArgs.call(this, args));
let executeTimeout;
const timeoutPromise = new Promise((_, reject) => {
executeTimeout = setTimeout(() => {
const timeoutError = `script timeout${this.activeDialog ? ' reason: a browser dialog has opened as result of a executeScript call' : ''}`;
return reject(new Error(timeoutError));
}, scriptTimeout);
});
const result = await Promise.race([executePromise, timeoutPromise]);
clearTimeout(executeTimeout);
return _utils.transformExecuteResult.call(this, page, result);
}