手机自动化测试:Appium源码分析之跟踪代码分析四 1
手机自动化测试:Appium源码分析之跟踪代码分析四
控制器模块
// Appium webserver controller methods
// https://github.com/hugs/appium/blob/master/appium/server.py
"use strict";
var status = require('./status.js')
, logger = require('./logger.js').get('appium')
, _ = require('underscore')
, _s = require("underscore.string")
, swig = require('swig')
, path = require('path')
, version = require('../../package.json').version
, proxy = require('./proxy.js')
, responses = require('./responses.js')
, getResponseHandler = responses.getResponseHandler
, respondError = responses.respondError
, respondSuccess = responses.respondSuccess
, checkMissingParams = responses.checkMissingParams
, notYetImplemented = responses.notYetImplemented
, hasValue = require('appium-support').util.hasValue
, helpers = require('../helpers.js')
, logCustomDeprecationWarning = helpers.logCustomDeprecationWarning
, safely = require('./helpers.js').safely
, NotImplementedError = require('./errors').NotImplementedError;
exports.getGlobalBeforeFilter = function (appium) {
return function (req, res, next) {
req.appium = appium;
req.device = appium.device;
if (proxy.shouldProxy(req)) {
if (req.appium.commandTimeout) {
// if we're proxying, we never get into the sessionBeforeFilter,
// so let's make sure to reset the timeout on every request still
req.appium.resetTimeout();
}
if (typeof req.device.translatePath !== "undefined") {
req.device.translatePath(req);
}
proxy.doProxy(req, res, next);
} else {
next();
}
};
};
exports.sessionBeforeFilter = function (req, res, next) {
var match = new RegExp("([^/]+)").exec(req.params[0]);
var sessId = match ? match[1] : null;
if (req.appium.commandTimeout) {
req.appium.resetTimeout();
}
// if we don't actually have a valid session, respond with an error
if (sessId && (!req.device || req.appium.sessionId !== sessId)) {
safely(req, function () {
res.status(404).send({sessionId: null, status: status.codes.NoSuchDriver.code, value: ''});
});
} else {
next();
}
};
exports.getStatus = function (req, res) {
// Return a static JSON object to the client
var gitSha = req.appium.serverConfig['git-sha'];
var data = {build: {version: version}};
if (typeof gitSha !== "undefined") {
data.build.revision = gitSha;
}
if (req.device && typeof req.device.getStatusExtensions === "function") {
data = _.extend(data, req.device.getStatusExtensions());
}
respondSuccess(req, res, data);
};
exports.installApp = function (req, res) {
var install = function (appPath) {
req.device.installApp(appPath, function (error, response) {
if (error !== null) {
respondError(req, res, error);
} else {
respondSuccess(req, res, response);
}
});
};
if (typeof req.body.appPath !== "undefined") {
req.device.unpackApp(req, function (unpackedAppPath) {
if (unpackedAppPath === null) {
respondError(req, res, 'Only a (zipped) app/apk files can be installed using this endpoint');
} else {
install(unpackedAppPath);
}
});
} else if (typeof req.device.args.app !== "undefined") {
install(req.device.args.app);
} else {
respondError(req, res, "No app defined (either through desired capabilities or as an argument)");
}
};
exports.removeApp = function (req, res) {
req.body.appId = req.body.appId || req.body.bundleId;
if (checkMissingParams(req, res, {appId: req.body.appId}, true)) {
req.device.removeApp(req.body.appId, function (error, response) {
if (error !== null) {
respondError(req, res, response);
} else {
respondSuccess(req, res, response);
}
});
}
};
转载于:https://blog.51cto.com/10988776/1727929
手机自动化测试:Appium源码分析之跟踪代码分析四 1相关推荐
- mybatis源码之执行insert代码分析
系列文档: mybatis源码之创建SqlSessionFactory代码分析 mybatis源码之创建SqlSessionFactory代码分析 - mapper xml解析 mybatis源码之执 ...
- 手机自动化测试:Appium源码分析之跟踪代码分析四 5
doClick exports.doClick = function (req, res) { var elementId = req.params.elementId || req.body.ele ...
- 手机自动化测试:appium源码分析之bootstrap八
手机自动化测试:appium源码分析之bootstrap八 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大 ...
- 手机自动化测试:appium源码分析之bootstrap十二
手机自动化测试:appium源码分析之bootstrap十二 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请 ...
- 手机自动化测试:appium源码分析之bootstrap七
手机自动化测试:appium源码分析之bootstrap七 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.poptest测试开发 ...
- CTS(11)---android自动化测试CTS源码分析之一
android自动化测试CTS源码分析之一 1, 概述 CTS(Compatibility Test Suite)全名兼容性测试,主要目的就是让Android设备开发商能够开发出兼容性更好的andro ...
- app自动化测试之Appium 源码分析
Appium 是由 Node.js 来实现的 HTTP 服务,它并不是一套全新的框架,而是将现有的优秀的框架进行了集成,在 Selenium WebDriver 协议(JsonWireProtocol ...
- JAVA计算机毕业设计手机电子商城源码+系统+mysql数据库+lw文档
JAVA计算机毕业设计手机电子商城源码+系统+mysql数据库+lw文档 JAVA计算机毕业设计手机电子商城源码+系统+mysql数据库+lw文档 本源码技术栈: 项目架构:B/S架构 开发语言:Ja ...
- 直播开篇——电商直播系统源码直播场景和技术分析
一.直播场景和技术分析 好吧,既然你们非要搞什么直播,我就开始写写直播吧,怪不得WebRTC是下一代关键技术,直播的一些业务页必须要用WebRTC来实现 1. 电商直播系统源码场景分析 秀场直播 这个 ...
最新文章
- 从 ELK 到 EFK 演进
- Magical Sticks 棍子拼接
- 同级子目录下重新设置属性失效
- python为mysql设置id自增长_postgresql如何设置id自增长
- psp中java,PSP编程概述
- [导入]Spring Web Flow
- 电脑显示器闪屏_网课抗“疫”,有一台护眼显示器更省心
- 在Java中编码为Base64
- 区块链基础语言(二)——Go语言开发环境搭建
- 斐波那契查找算法(黄金分割查找算法)
- java获得时间差_Java获取时间差实例代码详解
- 主机无法ping通虚拟机xp系统
- 关于ie浏览器不能访问localhost的问题
- macbook键盘失灵
- 普通文档怎么换成php,wps只读文档怎么修改为普通文档
- 腾讯qlv格式转换mp4为何转换后只有音频
- APP下载量成空洞,留住用户最关键
- php update when,iphone will restart when update什么意思
- 2022-2027年中国体外诊断设备行业市场调研及未来发展趋势预测报告
- MySQL 报错:Error Code: 1264. Out of range value for column ‘final‘ at row 5
热门文章
- Linux下kvm宿主机死机,看到一些朋友苦虚拟机久矣,分享下我使用KVM的一些经验和技巧...
- 30针4k屏_华为发布智慧办公战略产品 企业智慧屏系列
- Java实用教程 课堂测试(2021C++补考题目)
- FPGA从Xilinx的7系列学起(6)
- Visual Studio Code 1.33 发布
- js中给数组中对象去重
- MySQL 加锁处理分析 ---非常牛逼
- Mongodb aggregation 基本操作示例
- 数据库Sharding的基本思想和切分策略
- 实现DataGridView和DevExpress.GridControl表头全选功能