-
Notifications
You must be signed in to change notification settings - Fork 39
/
Copy pathJavascriptExecutor.js
58 lines (51 loc) · 1.52 KB
/
JavascriptExecutor.js
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
'use strict';
var utils = require('../utils');
var addFinalProp = utils.addFinalProp;
var toArray = utils.collectionToArray;
var toObject = utils.mapToObject;
var classPaths = require('../classPaths');
var wd = require('../webdriver-sync');
var WebElement = wd.WebElement;
var Long = wd.Long;
var java = require('java');
module.exports = JavascriptExecutor;
function JavascriptExecutor(instance) {
addFinalProp(this, '_instance', instance);
}
JavascriptExecutor.prototype.executeAsyncScript = function() {
var result = this._instance.executeAsyncScriptSync.apply(
this._instance,
getArgs(arguments)
);
return coerce(result);
};
JavascriptExecutor.prototype.executeScript = function() {
var result = this._instance.executeScriptSync.apply(
this._instance,
getArgs(arguments)
);
return coerce(result);
};
function coerce(result) {
if (result === void 0 || result === null)
return null;
if (typeof result !== 'object')
return result;
if (java.instanceOf(result, classPaths.WebElement))
return new WebElement(result);
if (java.instanceOf(result, classPaths.Long))
return result.longValue;
if (java.instanceOf(result, classPaths.List)) {
return toArray(result, coerce);
}
if (java.instanceOf(result, classPaths.Map)) {
return toObject(result, coerce);
}
return result;
}
function getArgs(from) {
var args = [].slice.apply(from).map(utils.toInstance);
var script = args.shift();
var varArgs = java.newArray.apply(java, ['java.lang.Object', args]);
return [script, varArgs];
}