手机自动化测试: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相关推荐

  1. mybatis源码之执行insert代码分析

    系列文档: mybatis源码之创建SqlSessionFactory代码分析 mybatis源码之创建SqlSessionFactory代码分析 - mapper xml解析 mybatis源码之执 ...

  2. 手机自动化测试:Appium源码分析之跟踪代码分析四 5

    doClick exports.doClick = function (req, res) { var elementId = req.params.elementId || req.body.ele ...

  3. 手机自动化测试:appium源码分析之bootstrap八

    手机自动化测试:appium源码分析之bootstrap八 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大 ...

  4. 手机自动化测试:appium源码分析之bootstrap十二

    手机自动化测试:appium源码分析之bootstrap十二 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请 ...

  5. 手机自动化测试:appium源码分析之bootstrap七

    手机自动化测试:appium源码分析之bootstrap七 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.poptest测试开发 ...

  6. CTS(11)---android自动化测试CTS源码分析之一

    android自动化测试CTS源码分析之一 1, 概述 CTS(Compatibility Test Suite)全名兼容性测试,主要目的就是让Android设备开发商能够开发出兼容性更好的andro ...

  7. app自动化测试之Appium 源码分析

    Appium 是由 Node.js 来实现的 HTTP 服务,它并不是一套全新的框架,而是将现有的优秀的框架进行了集成,在 Selenium WebDriver 协议(JsonWireProtocol ...

  8. JAVA计算机毕业设计手机电子商城源码+系统+mysql数据库+lw文档

    JAVA计算机毕业设计手机电子商城源码+系统+mysql数据库+lw文档 JAVA计算机毕业设计手机电子商城源码+系统+mysql数据库+lw文档 本源码技术栈: 项目架构:B/S架构 开发语言:Ja ...

  9. 直播开篇——电商直播系统源码直播场景和技术分析

    一.直播场景和技术分析 好吧,既然你们非要搞什么直播,我就开始写写直播吧,怪不得WebRTC是下一代关键技术,直播的一些业务页必须要用WebRTC来实现 1. 电商直播系统源码场景分析 秀场直播 这个 ...

最新文章

  1. 从 ELK 到 EFK 演进
  2. Magical Sticks 棍子拼接
  3. 同级子目录下重新设置属性失效
  4. python为mysql设置id自增长_postgresql如何设置id自增长
  5. psp中java,PSP编程概述
  6. [导入]Spring Web Flow
  7. 电脑显示器闪屏_网课抗“疫”,有一台护眼显示器更省心
  8. 在Java中编码为Base64
  9. 区块链基础语言(二)——Go语言开发环境搭建
  10. 斐波那契查找算法(黄金分割查找算法)
  11. java获得时间差_Java获取时间差实例代码详解
  12. 主机无法ping通虚拟机xp系统
  13. 关于ie浏览器不能访问localhost的问题
  14. macbook键盘失灵
  15. 普通文档怎么换成php,wps只读文档怎么修改为普通文档
  16. 腾讯qlv格式转换mp4为何转换后只有音频
  17. APP下载量成空洞,留住用户最关键
  18. php update when,iphone will restart when update什么意思
  19. 2022-2027年中国体外诊断设备行业市场调研及未来发展趋势预测报告
  20. MySQL 报错:Error Code: 1264. Out of range value for column ‘final‘ at row 5

热门文章

  1. Linux下kvm宿主机死机,看到一些朋友苦虚拟机久矣,分享下我使用KVM的一些经验和技巧...
  2. 30针4k屏_华为发布智慧办公战略产品 企业智慧屏系列
  3. Java实用教程 课堂测试(2021C++补考题目)
  4. FPGA从Xilinx的7系列学起(6)
  5. Visual Studio Code 1.33 发布
  6. js中给数组中对象去重
  7. MySQL 加锁处理分析 ---非常牛逼
  8. Mongodb aggregation 基本操作示例
  9. 数据库Sharding的基本思想和切分策略
  10. 实现DataGridView和DevExpress.GridControl表头全选功能