Files
BeWoPlaner/BeWoPlanerMobil/node_modules/wd/lib/element-commands.js
Lyndon Jetten fda2c306b5 MoK: Report Viewer hinzugefügt
FaC: Das alte Flag von Terminen, die in die Zeiterfassung übernommen worden sind, wird ebenfalls berücksichtigt.
2023-03-13 19:39:04 +01:00

438 lines
12 KiB
JavaScript

//Element object
//Wrapper around browser methods
var _ = require("lodash")
, utils = require("./utils.js")
, deprecator = utils.deprecator
, fs = require("fs"),
callbacks = require("./callbacks"),
elementCallback = callbacks.elementCallback,
elementsCallback = callbacks.elementsCallback,
commands = require('./commands');
var elementCommands = {};
/**
* element.type(keys, cb) -> cb(err)
*
* @jsonWire POST /session/:sessionId/element/:id/value
*/
elementCommands.type = function (keys, cb) {
commands.type.apply(this.browser, [this, keys, cb]);
};
/**
* element.keys(keys, cb) -> cb(err)
*
* @jsonWire POST /session/:sessionId/element/:id/value
*/
elementCommands.keys = function (keys, cb) {
commands.keys.apply(this.browser, [keys, cb]);
};
function _isLocalFile(path, cb) {
fs.exists(path, function (exists) {
if(exists) {
fs.lstat(path, function (err, stats) {
cb(err, stats.isFile());
});
} else { cb(null, false); }
});
}
/**
* Equivalent to the python sendKeys binding. Upload file if
* a local file is detected, otherwise behaves like type.
* element.sendKeys(keys, cb) -> cb(err)
*/
elementCommands.sendKeys = function (keys, cb) {
var _this = this;
if (!Array.isArray(keys)) {keys = [keys];}
// ensure all keystrokes are strings to conform to JSONWP
_.each(keys, function(key, idx) {
if (typeof key !== "string") {
keys[idx] = key.toString();
}
});
var path = keys.join('');
_isLocalFile(path, function (err, isLocalFile) {
if(err){ return cb(err); }
if(isLocalFile) {
commands.uploadFile.apply(_this.browser, [path, function (err, distantFilePath) {
if(err){ return cb(err); }
return commands.type.apply(_this.browser, [_this, distantFilePath, cb]);
}]);
} else {
commands.type.apply(_this.browser, [_this, keys, cb]);
}
});
};
/**
* Equivalent to the python sendKeys binding, but replaces texts instead of keeping original. Upload file if
* a local file is detected, otherwise behaves like type.
* element.setText(keys, cb) -> cb(err)
*/
elementCommands.setText = function (keys, cb) {
var _this = this;
if (!Array.isArray(keys)) {keys = [keys];}
// ensure all keystrokes are strings to conform to JSONWP
_.each(keys, function(key, idx) {
if (typeof key !== "string") {
keys[idx] = key.toString();
}
});
commands.replace.apply(_this.browser, [_this, keys, cb]);
};
elementCommands.replaceKeys = function (keys, cb) {
deprecator.warn('element.replaceKeys', 'element.replaceKeys has been deprecated, use element.setText instead.');
elementCommands.setText.call(this, keys, cb);
};
/**
* element.click(cb) -> cb(err)
*
* @jsonWire POST /session/:sessionId/element/:id/click
*/
elementCommands.click = function (cb) {
commands.clickElement.apply(this.browser, [this, cb]);
};
/**
* element.tap(cb) -> cb(err)
*
* @jsonWire POST /session/:sessionId/touch/click
*/
elementCommands.tap = function (cb) {
commands.tapElement.apply(this.browser, [this, cb]);
};
/**
* element.doubleClick(cb) -> cb(err)
*
* @jsonWire POST /session/:sessionId/doubleclick
*/
elementCommands.doubleclick = function(cb) {
return commands.moveTo.apply(this.browser, [this, function(err) {
if(err) { return cb(err); }
commands.doubleclick.apply(this.browser, [cb]);
}.bind(this)]);
};
elementCommands.doubleClick = elementCommands.doubleclick;
/**
* element.moveTo(xoffset, yoffset, cb) -> cb(err)
* xoffset and y offset are optional.
*
* @jsonWire POST /session/:sessionId/moveto
*/
elementCommands.moveTo = function() {
var fargs = utils.varargs(arguments);
var cb = fargs.callback,
xoffset = fargs.all[0],
yoffset = fargs.all[1];
commands.moveTo.apply(this.browser, [this,xoffset, yoffset, cb]);
};
/**
* element.flick(xoffset, yoffset, speed, cb) -> cb(err)
*
* @jsonWire POST /session/:sessionId/touch/flick
*/
elementCommands.flick = function (xoffset, yoffset, speed, cb) {
commands.flick.apply(this.browser, [this.value, xoffset, yoffset, speed, cb]);
};
/**
* element.text(cb) -> cb(err, text)
*
* @jsonWire GET /session/:sessionId/element/:id/text
* @docOrder 2
*/
elementCommands.text = function (cb) {
commands.text.apply(this.browser, [this, cb]);
};
/**
* element.textPresent(searchText, cb) -> cb(err, boolean)
*
* @jsonWire GET /session/:sessionId/element/:id/text
* @docOrder 4
*/
elementCommands.textPresent = function(searchText, cb) {
commands.textPresent.apply(this.browser, [searchText, this, cb]);
};
/**
* element.getAttribute(attrName, cb) -> cb(err, value)
*
* @jsonWire GET /session/:sessionId/element/:id/attribute/:name
* @docOrder 2
*/
elementCommands.getAttribute = function(name, cb) {
commands.getAttribute.apply(this.browser, [this, name, cb]);
};
/**
* element.getTagName(cb) -> cb(err, name)
*
* @jsonWire GET /session/:sessionId/element/:id/name
*/
elementCommands.getTagName = function(cb) {
commands.getTagName.apply(this.browser, [this, cb]);
};
/**
* element.isDisplayed(cb) -> cb(err, displayed)
*
* @jsonWire GET /session/:sessionId/element/:id/displayed
*/
elementCommands.isDisplayed = function(cb) {
commands.isDisplayed.apply(this.browser, [this, cb]);
};
elementCommands.displayed = elementCommands.isDisplayed;
/**
* element.isSelected(cb) -> cb(err, selected)
*
* @jsonWire GET /session/:sessionId/element/:id/selected
*/
elementCommands.isSelected = function(cb) {
commands.isSelected.apply(this.browser, [this, cb]);
};
elementCommands.selected = elementCommands.isSelected;
/**
* element.isEnabled(cb) -> cb(err, enabled)
*
* @jsonWire GET /session/:sessionId/element/:id/enabled
*/
elementCommands.isEnabled = function(cb) {
commands.isEnabled.apply(this.browser, [this, cb]);
};
elementCommands.enabled = elementCommands.isEnabled;
/**
* isVisible(cb) -> cb(err, boolean)
*/
elementCommands.isVisible = function(cb) {
deprecator.warn('element.isVisible', 'element.isVisible has been deprecated, use element.isDisplayed instead.');
commands.isVisible.apply(this.browser, [this, cb]);
};
/**
* element.getLocation(cb) -> cb(err, location)
*
* @jsonWire GET /session/:sessionId/element/:id/location
*/
elementCommands.getLocation = function (cb) {
commands.getLocation.apply(this.browser, [this, cb]);
};
/**
* element.getLocationInView(cb) -> cb(err, location)
*
* @jsonWire GET /session/:sessionId/element/:id/location
*/
elementCommands.getLocationInView = function (cb) {
commands.getLocationInView.apply(this.browser, [this, cb]);
};
/**
* element.getSize(cb) -> cb(err, size)
*
* @jsonWire GET /session/:sessionId/element/:id/size
*/
elementCommands.getSize = function (cb) {
commands.getSize.apply(this.browser, [this, cb]);
};
/**
* element.getValue(cb) -> cb(err, value)
*
* @jsonWire GET /session/:sessionId/element/:id/attribute/:name
* @docOrder 4
*/
elementCommands.getValue = function(cb) {
commands.getValue.apply(this.browser, [this, cb]);
};
/**
* element.getComputedCss(cssProperty , cb) -> cb(err, value)
*
* @jsonWire GET /session/:sessionId/element/:id/css/:propertyName
*/
elementCommands.getComputedCss = function(styleName, cb) {
commands.getComputedCss.apply(this.browser, [this, styleName, cb]);
};
elementCommands.getComputedCSS = elementCommands.getComputedCss;
/**
* element.clear(cb) -> cb(err)
*
* @jsonWire POST /session/:sessionId/element/:id/clear
*/
elementCommands.clear = function(cb) {
commands.clear.apply(this.browser, [this, cb]);
};
/**
* element.submit(cb) -> cb(err)
*
* @jsonWire POST /session/:sessionId/element/:id/submit
*/
elementCommands.submit = function(cb) {
commands.submit.apply(this.browser, [this, cb]);
};
_.each(utils.elementFuncTypes, function(type) {
/**
* element.elementByClassName(value, cb) -> cb(err, element)
* element.elementByCssSelector(value, cb) -> cb(err, element)
* element.elementById(value, cb) -> cb(err, element)
* element.elementByName(value, cb) -> cb(err, element)
* element.elementByLinkText(value, cb) -> cb(err, element)
* element.elementByPartialLinkText(value, cb) -> cb(err, element)
* element.elementByTagName(value, cb) -> cb(err, element)
* element.elementByXPath(value, cb) -> cb(err, element)
* element.elementByCss(value, cb) -> cb(err, element)
* element.elementByIosUIAutomation(value, cb) -> cb(err, element)
* element.elementByIosClassChain(value, cb) -> cb(err, element)
* element.elementByIosPredicateString(value, cb) -> cb(err, element)
* element.elementByAndroidUIAutomator(value, cb) -> cb(err, element)
* element.elementByAccessibilityId(value, cb) -> cb(err, element)
*
* @jsonWire POST /session/:sessionId/element/:id/element
* @docOrder 2
*/
elementCommands['element' + utils.elFuncSuffix(type)] = function(value, cb) {
elementCommands.element.apply(this, [utils.elFuncFullType(type), value, cb]);
};
/**
* element.elementsByClassName(value, cb) -> cb(err, elements)
* element.elementsByCssSelector(value, cb) -> cb(err, elements)
* element.elementsById(value, cb) -> cb(err, elements)
* element.elementsByName(value, cb) -> cb(err, elements)
* element.elementsByLinkText(value, cb) -> cb(err, elements)
* element.elementsByPartialLinkText(value, cb) -> cb(err, elements)
* element.elementsByTagName(value, cb) -> cb(err, elements)
* element.elementsByXPath(value, cb) -> cb(err, elements)
* element.elementsByCss(value, cb) -> cb(err, elements)
* element.elementsByIosUIAUtomation(value, cb) -> cb(err, elements)
* element.elementsByIosClassChain(value, cb) -> cb(err, elements)
* element.elementsByIosPredicateString(value, cb) -> cb(err, elements)
* element.elementsByAndroidUIAutomator(value, cb) -> cb(err, elements)
* element.elementsByAccessibilityId(value, cb) -> cb(err, elements)
*
* @jsonWire POST /session/:sessionId/element/:id/elements
* @docOrder 2
*/
elementCommands['elements' + utils.elFuncSuffix(type)] = function(value, cb) {
elementCommands.elements.apply(this, [utils.elFuncFullType(type), value, cb]);
};
});
/**
* element.element(using, value, cb) -> cb(err, element)
*
* @jsonWire POST /session/:sessionId/element/:id/element
* @docOrder 1
*/
elementCommands.element = function(using, value, cb) {
var _this = this;
this.browser._jsonWireCall({
method: 'POST'
, relPath: '/element/' + _this.value + '/element'
, data: {using: using, value: value}
, cb: elementCallback(cb, this.browser)
});
};
/**
* element.elements(using, value, cb) -> cb(err, elements)
*
* @jsonWire POST /session/:sessionId/element/:id/elements
* @docOrder 1
*/
elementCommands.elements = function(using, value, cb) {
var _this = this;
this.browser._jsonWireCall({
method: 'POST'
, relPath: '/element/' + _this.value + '/elements'
, data: {using: using, value: value}
, cb: elementsCallback(cb, this.browser)
});
};
/**
* element.equals(other, cb) -> cb(err, value)
*
* @jsonWire GET /session/:sessionId/element/:id/equals/:other
* @docOrder 1
*/
elementCommands.equals = function(other, cb) {
commands.equalsElement.apply(this.browser, [this, other, cb]);
};
/**
* element.sleep(ms, cb) -> cb(err)
*/
elementCommands.sleep = function(ms, cb) {
cb = cb || function() {};
setTimeout(cb , ms);
};
/**
* element.noop(cb) -> cb(err)
*/
elementCommands.noop = function(cb) {
if(cb) { cb(); }
};
/**
* element.performMultiAction(actions) -> cb(err, touchStateObjects)
*
* @jsonWire POST /session/:sessionId/touch/multi/perform
*/
elementCommands.performMultiAction = function (actions, cb) {
commands.performMultiAction.apply(this.browser, [this, actions, cb]);
};
/**
* element.rotate(opts, cb) -> cb(err)
* opts is like the following:
* {x: 114, y: 198, duration: 5, radius: 3, rotation: 220, touchCount: 2}
*
* @jsonWire POST /session/:sessionId/appium/device/rotate
*/
elementCommands.rotate = function(opts, cb) {
commands.rotateDevice.apply(this.browser, [this, opts, cb]);
};
/**
* element.setImmediateValueInApp(value, cb) -> cb(err)
*
* @jsonWire POST /session/:sessionId/appium/element/:elementId?/value
*/
elementCommands.setImmediateValueInApp = function(value, cb) {
commands.setImmediateValueInApp.apply(this.browser, [this, value, cb]);
};
/**
* element.setImmediateValue(value, cb) -> cb(err)
*
* @jsonWire POST /session/:sessionId/appium/element/:elementId?/value
*/
elementCommands.setImmediateValue = elementCommands.setImmediateValueInApp;
module.exports = elementCommands;