mirror of
https://github.com/appium/appium.git
synced 2026-02-11 12:29:48 -06:00
95 lines
2.7 KiB
JavaScript
95 lines
2.7 KiB
JavaScript
"use strict";
|
|
|
|
var logger = require('../../server/logger.js').get('appium')
|
|
, _ = require('underscore')
|
|
, errors = require('../../server/errors.js')
|
|
, UnknownError = errors.UnknownError
|
|
, Chromedriver = require('./chromedriver.js');
|
|
|
|
var androidHybrid = {};
|
|
|
|
androidHybrid.listWebviews = function (cb) {
|
|
logger.info("Getting a list of available webviews");
|
|
var webviews = [];
|
|
this.adb.shell("cat /proc/net/unix", function (err, out) {
|
|
if (err) return cb(err);
|
|
_.each(out.split("\n"), function (line) {
|
|
if (line.indexOf("@webview_devtools_remote_") !== -1) {
|
|
webviews.push(/webview_devtools_remote_.+/.exec(line)[0]);
|
|
}
|
|
});
|
|
webviews = _.uniq(webviews);
|
|
logger.info(JSON.stringify(webviews));
|
|
cb(null, webviews);
|
|
});
|
|
};
|
|
|
|
androidHybrid.startChromedriverProxy = function (cb) {
|
|
logger.info("Connecting to chrome-backed webview");
|
|
if (this.chromedriver !== null) {
|
|
return cb(new Error("We already have a chromedriver instance running"));
|
|
}
|
|
var chromeArgs = {
|
|
port: this.args.chromeDriverPort
|
|
, deviceId: this.adb.curDeviceId
|
|
, enablePerformanceLogging: this.args.enablePerformanceLogging
|
|
};
|
|
this.chromedriver = new Chromedriver(chromeArgs,
|
|
this.onChromedriverExit.bind(this));
|
|
this.proxyHost = this.chromedriver.proxyHost;
|
|
this.proxyPort = this.chromedriver.proxyPort;
|
|
this.isProxy = true;
|
|
var caps = {
|
|
chromeOptions: {
|
|
androidPackage: this.args.appPackage,
|
|
androidUseRunningApp: true
|
|
}
|
|
};
|
|
this.chromedriver.createSession(caps, function (err, sessId) {
|
|
if (err) return cb(err);
|
|
logger.info("Setting proxy session id to " + sessId);
|
|
this.proxySessionId = sessId;
|
|
cb();
|
|
}.bind(this));
|
|
};
|
|
|
|
androidHybrid.onChromedriverExit = function () {
|
|
logger.info("Chromedriver exited unexpectedly");
|
|
if (typeof this.cbForCurrentCmd === "function") {
|
|
var error = new UnknownError("Chromedriver quit unexpectedly during session");
|
|
this.shutdown(function () {
|
|
this.cbForCurrentCmd(error, null);
|
|
}.bind(this));
|
|
}
|
|
};
|
|
|
|
androidHybrid.cleanupChromedriver = function (cb) {
|
|
if (this.chromedriver) {
|
|
logger.info("Cleaning up Chromedriver");
|
|
this.chromedriver.stop(function (err) {
|
|
if (err) logger.warn("Error stopping chromedriver: " + err.message);
|
|
this.chromedriver = null;
|
|
this.proxyHost = null;
|
|
this.proxyPort = null;
|
|
this.proxySessionId = null;
|
|
this.isProxy = false;
|
|
cb();
|
|
}.bind(this));
|
|
} else {
|
|
cb();
|
|
}
|
|
};
|
|
|
|
androidHybrid.stopChromedriverProxy = function (cb) {
|
|
if (this.chromedriver !== null) {
|
|
this.chromedriver.deleteSession(function (err) {
|
|
if (err) return cb(err);
|
|
this.cleanupChromedriver(cb);
|
|
}.bind(this));
|
|
} else {
|
|
cb();
|
|
}
|
|
};
|
|
|
|
module.exports = androidHybrid;
|