Skip to content

Commit

Permalink
port chrome config
Browse files Browse the repository at this point in the history
  • Loading branch information
jlipps committed Mar 4, 2014
1 parent b058732 commit 42780f2
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 63 deletions.
23 changes: 1 addition & 22 deletions lib/appium.js
Expand Up @@ -32,6 +32,7 @@ var Appium = function (args) {
this.session = null;
this.preLaunched = false;
this.fastReset = !this.args.fullReset && !this.args.noReset;
this.args.fastReset = this.fastReset;
this.sessionOverride = this.args.sessionOverride;
this.resetting = false;
this.defCommandTimeoutMs = 60 * 1000;
Expand Down Expand Up @@ -264,28 +265,6 @@ Appium.prototype.getDevice = function (deviceType) {
this.device = new Android(androidOpts);
}
} else if (this.isSelendroid()) {
var selendroidOpts = {
apkPath: this.args.app
, desiredCaps: this.desiredCapabilities
, verbose: !this.args.quiet
, udid: this.args.udid
, appPackage: this.args.androidPackage
, appActivity: this.args.androidActivity
, appWaitPackage: this.args.androidWaitPackage
, appWaitActivity: this.args.androidWaitActivity
, avdName: this.args.avd
, appDeviceReadyTimeout: this.args.androidDeviceReadyTimeout
, reset: !this.args.noReset
, systemPort: this.args.selendroidPort
, fastReset: this.fastReset
, fullReset: this.args.fullReset
, useKeystore: this.args.useKeystore
, keystorePath: this.args.keystorePath
, keystorePassword: this.args.keystorePassword
, keyAlias: this.args.keyAlias
, keyPassword: this.args.keyPassword
};
this.device = new Selendroid(selendroidOpts);
} else if (this.isFirefoxOS()) {
var firefoxOpts = {
app: this.args.app
Expand Down
29 changes: 19 additions & 10 deletions lib/devices/android/chrome.js
Expand Up @@ -7,17 +7,20 @@ var Android = require('./android.js')
, ADB = require('./adb.js')
, Chromedriver = require('./chromedriver.js');

var ChromeAndroid = function (opts) {
this.initialize(opts);
var ChromeAndroid = function () {
this.init();
};

_.extend(ChromeAndroid.prototype, Android.prototype);
ChromeAndroid.prototype._androidInit = Android.prototype.init;
ChromeAndroid.prototype.init = function () {
this._androidInit();
this.avoidProxy = [];
this.opts = opts;
this.isProxy = true;
this.adb = null;
this.onDie = null;
};

_.extend(ChromeAndroid.prototype, Android.prototype);

ChromeAndroid.prototype.configure = function (args, caps, cb) {
logger.info("Looks like we want chrome on android");
this._deviceConfigure(args, caps);
Expand All @@ -32,12 +35,18 @@ ChromeAndroid.prototype.configure = function (args, caps, cb) {
this.args.androidPackage = "com.android.chrome";
this.args.androidActivity = "com.google.android.apps.chrome.Main";
}
// don't allow setAndroidArgs to reclobber our androidPackage/activity
delete this.capabilities['app-package'];
delete this.capabilities['app-activity'];
this.setAndroidArgs();
this.args.app = null;
this.args.systemPort = this.args.chromeDriverPort;
this.args.proxyPort = this.args.systemPort;
cb();
};

ChromeAndroid.prototype.start = function (cb, onDie) {
this.adb = new ADB(this.opts);
this.adb = new ADB(this.args);
this.onDie = onDie;

async.waterfall([
Expand All @@ -49,7 +58,7 @@ ChromeAndroid.prototype.start = function (cb, onDie) {
};

ChromeAndroid.prototype.prepareChromedriver = function (cb) {
this.chromedriver = new Chromedriver(this.opts.proxyPort,
this.chromedriver = new Chromedriver(this.args.proxyPort,
this.adb.curDeviceId, this.onChromedriverExit.bind(this));
this.proxyTo = this.chromedriver.proxyTo.bind(this.chromedriver);
this.proxyHost = this.chromedriver.proxyHost;
Expand All @@ -68,12 +77,12 @@ ChromeAndroid.prototype.unlock = function (cb) {
ChromeAndroid.prototype.createSession = function (cb) {
var caps = {
chromeOptions: {
androidPackage: this.opts.appPackage,
androidActivity: this.opts.appActivity
androidPackage: this.args.appPackage,
androidActivity: this.args.appActivity
}
};
var knownPackages = ["org.chromium.chrome.testshell", "com.android.chrome"];
if (_.contains(knownPackages, this.opts.appPackage)) {
if (_.contains(knownPackages, this.args.appPackage)) {
delete caps.chromeOptions.androidActivity;
}
this.chromedriver.createSession(caps, cb);
Expand Down
62 changes: 33 additions & 29 deletions lib/devices/android/selendroid.js
Expand Up @@ -20,17 +20,17 @@ var ADB = require('./adb.js')
, path = require('path');

var Selendroid = function () {
this.opts = opts;
this.opts.devicePort = 8080;
this.skipUninstall = opts.fastReset || !opts.reset;
this.opts.systemPort = opts.systemPort;
this.avdName = opts.avdName || null;
this.appWaitPackage = opts.appWaitPackage || opts.appPackage;
this.appWaitActivity = opts.appWaitActivity || opts.appActivity;
this.init();
};

_.extend(Selendroid.prototype, Device.prototype);
Selendroid.prototype._deviceInit = Device.prototype.init;
Selendroid.prototype.init = function () {
this._deviceInit();
this.appExt = ".apk";
this.args = opts;
this.args.devicePort = 8080;
this.serverApk = null;
this.appPackage = opts.appPackage;
this.apkPath = opts.apkPath;
this.appActivity = opts.appActivity;
this.desiredCaps = opts.desiredCaps;
this.onStop = function () {};
this.selendroidSessionId = null;
Expand All @@ -57,25 +57,30 @@ var Selendroid = function () {
, 'toggleLocationServices'
];
this.proxyHost = 'localhost';
this.proxyPort = opts.systemPort;
this.avoidProxy = [
['GET', new RegExp('^/wd/hub/session/[^/]+/log/types$')]
, ['POST', new RegExp('^/wd/hub/session/[^/]+/log')]
];
};

_.extend(Selendroid.prototype, Device.prototype);
_.extend(Selendroid.prototype, androidCommon);
Selendroid.prototype._deviceConfigure = Device.prototype.configure;
Selendroid.prototype._deviceConfigureApp = Device.prototype.configureApp;
Selendroid.prototype._setAndroidArgs = androidCommon.setAndroidArgs;
Selendroid.prototype.setAndroidArgs = function () {
this._setAndroidArgs();
this.args.systemPort = this.args.selendroidPort;
this.proxyPort = this.args.systemPort;
};

Selendroid.prototype.start = function (cb) {
logger.info("Starting selendroid server");
this.adb = new ADB(this.opts);
this.adb = new ADB(this.args);

var modServerExists = false
, modAppPkg = this.appPackage + '.selendroid';
, modAppPkg = this.args.appPackage + '.selendroid';
this.selendroidServerPath = path.resolve(getTempPath(),
'selendroid.' + this.appPackage + '.apk');
'selendroid.' + this.args.appPackage + '.apk');

var checkModServerExists = function (cb) {
fs.stat(this.selendroidServerPath, function (err) {
Expand Down Expand Up @@ -141,9 +146,9 @@ Selendroid.prototype.start = function (cb) {
};

Selendroid.prototype.pushSelendroid = function (cb) {
var instrumentWith = this.appPackage + ".selendroid/" +
var instrumentWith = this.args.appPackage + ".selendroid/" +
"io.selendroid.ServerInstrumentation";
this.adb.instrument(this.appPackage, this.appActivity, instrumentWith, cb);
this.adb.instrument(this.args.appPackage, this.args.appActivity, instrumentWith, cb);
};

Selendroid.prototype.checkSelendroidCerts = function (cb) {
Expand All @@ -158,10 +163,10 @@ Selendroid.prototype.checkSelendroidCerts = function (cb) {
};

// these run in parallel
var apks = [this.selendroidServerPath, this.apkPath];
var apks = [this.selendroidServerPath, this.args.app];
_.each(apks, function (apk) {
logger.info("Checking signed status of " + apk);
this.adb.checkApkCert(apk, this.appPackage, function (err, isSigned) {
this.adb.checkApkCert(apk, this.args.appPackage, function (err, isSigned) {
if (err) return cb(err);
if (isSigned) return onDoneSigning();
this.adb.sign([apk], function (err) {
Expand All @@ -184,7 +189,7 @@ Selendroid.prototype.stop = function (cb) {
});
}.bind(this);

if (this.opts.fullReset) {
if (this.args.fullReset) {
logger.info("Removing app from device");
this.uninstallApp(function (err) {
if (err) {
Expand Down Expand Up @@ -279,20 +284,20 @@ Selendroid.prototype.createSession = function (cb) {
}
}.bind(this));
logger.info("Creating Selendroid session");
var data = {desiredCapabilities: this.desiredCaps};
var data = {desiredCapabilities: this.capabilities};
this.proxyTo('/wd/hub/session', 'POST', data, function (err, res, body) {
if (err) return cb(err);

if (res.statusCode === 301 && body.sessionId) {
logger.info("Successfully started selendroid session");
this.selendroidSessionId = body.sessionId;
this.adb.waitForActivity(this.appWaitPackage, this.appWaitActivity, 1800,
this.adb.waitForActivity(this.args.appWaitPackage, this.args.appWaitActivity, 1800,
function (err) {
if (err) {
logger.info("Selendroid hasn't started app yet, let's do it " +
"manually with adb.startApp");
return this.adb.startApp(this.appPackage, this.appActivity,
this.appWaitPackage, this.appWaitActivity, false, function (err) {
return this.adb.startApp(this.args.appPackage, this.args.appActivity,
this.args.appWaitPackage, this.args.appWaitActivity, false, function (err) {
if (err) return cb(err);
return cb(null, body.sessionId);
}.bind(this));
Expand All @@ -312,7 +317,7 @@ Selendroid.prototype.deleteSession = function (cb) {
this.proxyTo(url, 'DELETE', null, function (err, res) {
if (err) return cb(err);
if (res.statusCode !== 200) return cb(new Error("Status was not 200"));
this.adb.forceStop(this.appPackage, function (err) {
this.adb.forceStop(this.args.appPackage, function (err) {
if (err) return cb(err);
this.adb.stopLogcat(cb);
}.bind(this));
Expand All @@ -326,10 +331,10 @@ Selendroid.prototype.getLogTypes = getLogTypes;
Selendroid.prototype.insertSelendroidManifest = function (serverPath, cb) {
logger.info("Inserting selendroid manifest");
var newServerPath = this.selendroidServerPath
, newPackage = this.appPackage + '.selendroid'
, newPackage = this.args.appPackage + '.selendroid'
, srcManifest = path.resolve(__dirname, '..', '..', '..', 'build',
'selendroid', 'AndroidManifest.xml')
, dstDir = path.resolve(getTempPath(), this.appPackage)
, dstDir = path.resolve(getTempPath(), this.args.appPackage)
, dstManifest = path.resolve(dstDir, 'AndroidManifest.xml');

try {
Expand All @@ -345,7 +350,7 @@ Selendroid.prototype.insertSelendroidManifest = function (serverPath, cb) {
function (cb) { this.adb.checkSdkBinaryPresent("aapt", cb); }.bind(this),
function (cb) {
this.adb.compileManifest(dstManifest, newPackage,
this.appPackage, cb);
this.args.appPackage, cb);
}.bind(this),
function (cb) {
this.adb.insertManifest(dstManifest, serverPath,
Expand All @@ -354,7 +359,6 @@ Selendroid.prototype.insertSelendroidManifest = function (serverPath, cb) {
], cb);
};

_.extend(Selendroid.prototype, androidCommon);
Selendroid.prototype.setLocation = androidController.setLocation;
Selendroid.prototype.removeApp = androidController.removeApp;
Selendroid.prototype.unpackApp = androidController.unpackApp;
Expand Down
4 changes: 2 additions & 2 deletions lib/server/parser.js
Expand Up @@ -62,7 +62,7 @@ var args = [
, required: false
, type: 'int'
, example: "4724"
, help: '(Android-only) port to connect to device on. DEPRECATED. Use --bootstrap-port instead'
, help: '[DEPRECATED] (Android-only) port to use on device to talk to Appium. Use --bootstrap-port instead'
}],

[['-bp', '--bootstrap-port'], {
Expand All @@ -71,7 +71,7 @@ var args = [
, required: false
, type: 'int'
, example: "4724"
, help: '(Android-only) port to connect to device on'
, help: '(Android-only) port to use on device to talk to Appium'
}],

[['-k', '--keep-artifacts'], {
Expand Down

0 comments on commit 42780f2

Please sign in to comment.