mirror of
https://github.com/appium/appium.git
synced 2026-10-20 23:57:22 +08:00
249 lines
6.8 KiB
JavaScript
249 lines
6.8 KiB
JavaScript
// Appium webserver controller methods
|
|
// https://github.com/hugs/appium/blob/master/appium/server.py
|
|
"use strict";
|
|
var status = require('./uiauto/lib/status');
|
|
|
|
function getResponseHandler(req, res, validateResponse) {
|
|
var responseHandler = function(err, response) {
|
|
if (req.appium || response.sessionId) {
|
|
response.sessionId = req.appium.sessionId || response.sessionId || null;
|
|
}
|
|
if (err !== null) {
|
|
response.status = status.codes.UnknownError.code;
|
|
} else {
|
|
if (typeof(validateResponse) === 'function') {
|
|
// If a validate method was provided, use it to update the response
|
|
response = validateResponse(response);
|
|
}
|
|
}
|
|
res.send(response);
|
|
};
|
|
return responseHandler;
|
|
}
|
|
|
|
exports.sessionBeforeFilter = function(req, res, next) {
|
|
var match = new RegExp("([^/]+)").exec(req.params[0]);
|
|
var sessId = match ? match[1] : null;
|
|
// if we don't actually have a valid session, respond with an error
|
|
if (sessId && (!req.device || req.appium.sessionId != sessId)) {
|
|
res.send({sessionId: sessId, status: status.codes.NoSuchDriver, value: ''});
|
|
} else {
|
|
next();
|
|
}
|
|
};
|
|
|
|
exports.getStatus = function(req, res) {
|
|
// Return a static JSON object to the client
|
|
getResponseHandler(req, res)(null, {
|
|
status: status.codes.Success.code,
|
|
value: {
|
|
build: {version: 'Appium 1.0'}
|
|
}});
|
|
};
|
|
|
|
exports.createSession = function(req, res) {
|
|
// we can talk to the device client from here
|
|
var desired = req.body.desiredCapabilities;
|
|
req.appium.start(req.body.desiredCapabilities, function(err, instance) {
|
|
if (err) {
|
|
return res.send({status: status.codes.NoSuchDriver, value: err});
|
|
}
|
|
|
|
if (desired && desired.newCommandTimeout) {
|
|
instance.setCommandTimeout(desired.newCommandTimeout, function() {
|
|
res.send(303, "/wd/hub/session/" + req.appium.sessionId);
|
|
});
|
|
} else {
|
|
res.send(303, "/wd/hub/session/" + req.appium.sessionId);
|
|
}
|
|
});
|
|
};
|
|
|
|
exports.getSession = function(req, res) {
|
|
// Return a static JSON object to the client
|
|
getResponseHandler(req, res)(null, {
|
|
status: status.codes.Success.code,
|
|
value: req.device.capabilities
|
|
});
|
|
};
|
|
|
|
exports.getSessions = function(req, res) {
|
|
res.send([{id: req.appium.sessionId , capabilities: req.device.capabilities}]);
|
|
};
|
|
|
|
exports.deleteSession = function(req, res) {
|
|
req.appium.stop(getResponseHandler(req, res));
|
|
};
|
|
|
|
exports.findElements = function(req, res) {
|
|
var strategy = req.body.using
|
|
, selector = req.body.value;
|
|
|
|
req.device.findElements(strategy, selector, getResponseHandler(req, res));
|
|
};
|
|
|
|
exports.findElement = function(req, res) {
|
|
var strategy = req.body.using
|
|
, selector = req.body.value;
|
|
|
|
req.device.findElement(strategy, selector, getResponseHandler(req, res));
|
|
};
|
|
|
|
exports.findElementFromElement = function(req, res) {
|
|
var element = req.params.elementId
|
|
, strategy = req.body.using
|
|
, selector = req.body.value;
|
|
|
|
req.device.findElementFromElement(element, strategy, selector, getResponseHandler(req, res));
|
|
};
|
|
|
|
exports.findElementsFromElement = function(req, res) {
|
|
var element = req.params.elementId
|
|
, strategy = req.body.using
|
|
, selector = req.body.value;
|
|
|
|
req.device.findElementsFromElement(element, strategy, selector, getResponseHandler(req, res));
|
|
};
|
|
|
|
exports.setValue = function(req, res) {
|
|
var elementId = req.params.elementId
|
|
, value = req.body.value.join('');
|
|
|
|
req.device.setValue(elementId, value, getResponseHandler(req, res));
|
|
};
|
|
|
|
exports.doClick = function(req, res) {
|
|
var elementId = req.params.elementId;
|
|
|
|
req.device.click(elementId, getResponseHandler(req, res));
|
|
};
|
|
|
|
exports.clear = function(req, res) {
|
|
var elementId = req.params.elementId;
|
|
|
|
req.device.clear(elementId, getResponseHandler(req, res));
|
|
};
|
|
|
|
exports.getText = function(req, res) {
|
|
var elementId = req.params.elementId;
|
|
|
|
req.device.getText(elementId, getResponseHandler(req, res));
|
|
};
|
|
|
|
exports.getAttribute = function(req, res) {
|
|
var elementId = req.params.elementId
|
|
, attributeName = req.params.name;
|
|
|
|
req.device.getAttribute(elementId, attributeName, getResponseHandler(req, res));
|
|
};
|
|
|
|
exports.getLocation = function(req, res) {
|
|
var elementId = req.params.elementId;
|
|
|
|
req.device.getLocation(elementId, getResponseHandler(req, res));
|
|
};
|
|
|
|
exports.getSize = function(req, res) {
|
|
var elementId = req.params.elementId;
|
|
|
|
req.device.getSize(elementId, getResponseHandler(req, res));
|
|
};
|
|
|
|
exports.keys = function(req, res) {
|
|
var elementId = req.params.elementId
|
|
, keys = req.body.value.join('');
|
|
|
|
req.device.keys(elementId, keys, getResponseHandler(req, res));
|
|
};
|
|
|
|
exports.frame = function(req, res) {
|
|
var frame = req.body.id;
|
|
|
|
req.device.frame(frame, getResponseHandler(req, res));
|
|
};
|
|
|
|
exports.elementDisplayed = function(req, res) {
|
|
var elementId = req.params.elementId;
|
|
|
|
req.device.elementDisplayed(elementId, getResponseHandler(req, res));
|
|
};
|
|
|
|
exports.elementEnabled = function(req, res) {
|
|
var elementId = req.params.elementId;
|
|
|
|
req.device.elementEnabled(elementId, getResponseHandler(req, res));
|
|
};
|
|
|
|
exports.getPageSource = function(req, res) {
|
|
req.device.getPageSource(getResponseHandler(req, res));
|
|
};
|
|
|
|
exports.getAlertText = function(req, res) {
|
|
req.device.getAlertText(getResponseHandler(req, res));
|
|
};
|
|
|
|
exports.postAcceptAlert = function(req, res) {
|
|
req.device.postAcceptAlert(getResponseHandler(req, res));
|
|
};
|
|
|
|
exports.postDismissAlert = function(req, res) {
|
|
req.device.postDismissAlert(getResponseHandler(req, res));
|
|
};
|
|
|
|
exports.implicitWait = function(req, res) {
|
|
var seconds = req.body.ms / 1000;
|
|
|
|
req.device.implicitWait(seconds, getResponseHandler(req, res));
|
|
};
|
|
|
|
exports.setOrientation = function(req, res) {
|
|
var orientation = req.body.orientation;
|
|
|
|
req.device.setOrientation(orientation, getResponseHandler(req, res));
|
|
};
|
|
|
|
exports.getOrientation = function(req, res) {
|
|
req.device.getOrientation(getResponseHandler(req, res));
|
|
};
|
|
|
|
exports.getScreenshot = function(req, res) {
|
|
req.device.getScreenshot(getResponseHandler(req, res));
|
|
};
|
|
|
|
exports.flick = function(req, res) {
|
|
var swipe = req.body.swipe
|
|
, xSpeed = req.body.xSpeed
|
|
, ySpeed = req.body.ySpeed
|
|
, element = req.body.element;
|
|
|
|
if (element) {
|
|
exports.flickElement(req, res);
|
|
} else {
|
|
req.device.flick(xSpeed, ySpeed, swipe, getResponseHandler(req, res));
|
|
}
|
|
};
|
|
|
|
exports.flickElement = function(req, res) {
|
|
var element = req.body.element
|
|
, xoffset = req.body.xoffset
|
|
, yoffset = req.body.yoffset
|
|
, speed = req.body.speed;
|
|
|
|
req.device.flickElement(element, xoffset, yoffset, speed, getResponseHandler(req, res));
|
|
};
|
|
|
|
exports.postUrl = function(req, res) {
|
|
req.device.url(getResponseHandler(req, res));
|
|
};
|
|
|
|
exports.active = function(req, res) {
|
|
req.device.active(getResponseHandler(req, res));
|
|
};
|
|
|
|
exports.unknownCommand = function(req, res) {
|
|
getResponseHandler(req, res)(null, {
|
|
status: status.codes.UnknownCommand
|
|
, value: ''
|
|
});
|
|
};
|