Skip to content

Commit efee24e

Browse files
authoredFeb 24, 2019
feat: remoteAddress option (#202)
* feat: remoteAddress option
1 parent 4e3e290 commit efee24e

10 files changed

+69
-44
lines changed
 

‎index.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ export async function createDriver(args?: INsCapabilitiesArgs) {
8484

8585
if (nsCapabilities.attachToDebug) {
8686
if (!appiumDriver) {
87-
appiumDriver = await AppiumDriver.createAppiumDriver(port, nsCapabilities);
87+
appiumDriver = await AppiumDriver.createAppiumDriver(nsCapabilities);
8888
}
8989
return appiumDriver;
9090
}
@@ -101,7 +101,7 @@ export async function createDriver(args?: INsCapabilitiesArgs) {
101101
if (appiumDriver !== null && appiumDriver.isAlive) {
102102
return appiumDriver;
103103
} else if (appiumDriver === null) {
104-
appiumDriver = await AppiumDriver.createAppiumDriver(port, nsCapabilities);
104+
appiumDriver = await AppiumDriver.createAppiumDriver(nsCapabilities);
105105
} else if (appiumDriver !== null && !appiumDriver.isAlive) {
106106
await appiumDriver.init();
107107
}

‎lib/appium-driver.d.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ export declare class AppiumDriver {
6060
wd(): any;
6161
click(args: any): Promise<any>;
6262
navBack(): Promise<any>;
63-
static createAppiumDriver(port: number, args: INsCapabilities): Promise<AppiumDriver>;
63+
static createAppiumDriver(args: INsCapabilities): Promise<AppiumDriver>;
6464
/**
6565
*
6666
* @param xPath

‎lib/appium-driver.ts

+6-23
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,7 @@ import {
1616
DeviceController,
1717
IDevice,
1818
DeviceType,
19-
AndroidController,
20-
killAllProcessAndRelatedCommand
19+
AndroidController
2120
} from "mobile-devices-controller";
2221
import {
2322
addExt,
@@ -183,27 +182,11 @@ export class AppiumDriver {
183182
// return await this._driver.getPerformanceData(this._args.appiumCaps.appPackage, type, timeout);
184183
// }
185184

186-
public static async createAppiumDriver(port: number, args: INsCapabilities) {
187-
let driverConfig: any = {
188-
host: "localhost",
189-
port: port
190-
};
191-
185+
public static async createAppiumDriver(args: INsCapabilities) {
192186
if (!args.isValidated) {
193187
await args.validateArgs();
194188
}
195189

196-
if (args.isSauceLab) {
197-
const sauceUser = process.env.SAUCE_USER || process.env.npm_config["SAUCE_USER"];
198-
const sauceKey = process.env.SAUCE_KEY || process.env.npm_config["SAUCE_KEY"];
199-
200-
if (!sauceKey || !sauceUser) {
201-
throw new Error("Sauce Labs Username or Access Key is missing! Check environment variables for SAUCE_USER and SAUCE_KEY !!!");
202-
}
203-
204-
driverConfig = "https://" + sauceUser + ":" + sauceKey + "@ondemand.saucelabs.com:443/wd/hub";
205-
}
206-
207190
log("Creating driver!", args.verbose);
208191

209192
if (!args.attachToDebug && !args.sessionId) {
@@ -216,12 +199,12 @@ export class AppiumDriver {
216199
}
217200

218201
const webio = webdriverio.remote({
219-
baseUrl: driverConfig.host,
220-
port: driverConfig.port,
202+
baseUrl: args.driverConfig.host,
203+
port: args.driverConfig.port,
221204
desiredCapabilities: args.appiumCaps
222205
});
223206

224-
const driver = await wd.promiseChainRemote(driverConfig);
207+
const driver = await wd.promiseChainRemote(args.driverConfig);
225208
AppiumDriver.configureLogging(driver, args.verbose);
226209

227210
let hasStarted = false;
@@ -298,7 +281,7 @@ export class AppiumDriver {
298281
retries--;
299282
}
300283

301-
return new AppiumDriver(driver, wd, webio, driverConfig, args);
284+
return new AppiumDriver(driver, wd, webio, args.driverConfig, args);
302285
}
303286

304287
/**

‎lib/interfaces/ns-capabilities-args.d.ts

+1
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,5 @@ export interface INsCapabilitiesArgs {
3838
imagesPath?: string;
3939
startDeviceOptions?: string;
4040
deviceTypeOrPlatform?: string;
41+
driverConfig?: any;
4142
}

‎lib/interfaces/ns-capabilities-args.ts

+1
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,5 @@ export interface INsCapabilitiesArgs {
3939
imagesPath?: string;
4040
startDeviceOptions?: string;
4141
deviceTypeOrPlatform?: string
42+
driverConfig?: any;
4243
}

‎lib/ns-capabilities.d.ts

+1
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ export declare class NsCapabilities implements INsCapabilities {
3939
exceptions: Array<string>;
4040
imagesPath: string;
4141
deviceTypeOrPlatform: string;
42+
driverConfig: any;
4243
constructor(_parser: INsCapabilitiesArgs);
4344
readonly isAndroid: any;
4445
readonly isIOS: boolean;

‎lib/ns-capabilities.ts

+8-1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ export class NsCapabilities implements INsCapabilities {
4444
public exceptions: Array<string> = new Array();
4545
public imagesPath: string;
4646
public deviceTypeOrPlatform: string;
47+
public driverConfig: any;
4748

4849
constructor(private _parser: INsCapabilitiesArgs) {
4950
this.projectDir = this._parser.projectDir;
@@ -73,6 +74,7 @@ export class NsCapabilities implements INsCapabilities {
7374
this.appiumCaps = this._parser.appiumCaps;
7475
this.deviceTypeOrPlatform = this._parser.deviceTypeOrPlatform;
7576
this.device = this._parser.device;
77+
this.driverConfig = this._parser.driverConfig;
7678
}
7779

7880
get isAndroid() { return this.isAndroidPlatform(); }
@@ -103,8 +105,13 @@ export class NsCapabilities implements INsCapabilities {
103105
this.isValidated = true;
104106
}
105107

108+
if (!this.driverConfig) {
109+
this.driverConfig = {};
110+
this.driverConfig.host = "localhost";
111+
this.driverConfig.port = this.port;
112+
}
113+
106114
if (this.deviceTypeOrPlatform || this.device) {
107-
108115
let searchQuery = <IDevice>{};
109116
if (this.deviceTypeOrPlatform) {
110117
if (this.deviceTypeOrPlatform === Platform.ANDROID || this.deviceTypeOrPlatform === Platform.IOS) {

‎lib/parser.d.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export declare const projectDir: string, projectBinary: string, pluginRoot: string, pluginBinary: string, port: number, verbose: boolean, appiumCapsLocation: string, testFolder: string, runType: string, isSauceLab: boolean, appPath: string, storage: string, testReports: string, devMode: boolean, ignoreDeviceController: boolean, wdaLocalPort: number, path: string, relaxedSecurity: boolean, cleanApp: boolean, attachToDebug: boolean, sessionId: string, startSession: boolean, capabilitiesName: string, imagesPath: string, startDeviceOptions: string, deviceTypeOrPlatform: string, device: any;
1+
export declare const projectDir: string, projectBinary: string, pluginRoot: string, pluginBinary: string, port: number, verbose: boolean, appiumCapsLocation: string, testFolder: string, runType: string, isSauceLab: boolean, appPath: string, storage: string, testReports: string, devMode: boolean, ignoreDeviceController: boolean, wdaLocalPort: number, path: string, relaxedSecurity: boolean, cleanApp: boolean, attachToDebug: boolean, sessionId: string, startSession: boolean, capabilitiesName: string, imagesPath: string, startDeviceOptions: string, deviceTypeOrPlatform: string, device: any, driverConfig: any;

‎lib/parser.ts

+28-2
Original file line numberDiff line numberDiff line change
@@ -126,17 +126,41 @@ const config = (() => {
126126
if (!options.runType && !options.device && options._[0]) {
127127
deviceTypeOrPlatform = options._[0].toLowerCase() === "android" ? "android" : "ios";
128128
}
129+
130+
options.driverConfig = options.remoteAddress;
131+
132+
options.port = options.port || process.env.npm_config_port || process.env["APPIUM_PORT"] || 4723;
133+
134+
if (!options.driverConfig) {
135+
options.driverConfig = {
136+
host: "localhost",
137+
port: options.port
138+
};
139+
}
140+
141+
options.isSauceLab = options.sauceLab || process.env.npm_config_sauceLab;
142+
if (options.isSauceLab && !options.remoteAddress) {
143+
const sauceUser = options.sauceUser || process.env.SAUCE_USER || process.env.npm_config["SAUCE_USER"];
144+
const sauceKey = options.sauceKey || process.env.SAUCE_KEY || process.env.npm_config["SAUCE_KEY"];
145+
146+
if (!sauceKey || !sauceUser) {
147+
throw new Error("Sauce Labs Username or Access Key is missing! Check environment variables for SAUCE_USER and SAUCE_KEY !!!");
148+
}
149+
150+
options.driverConfig = "https://" + sauceUser + ":" + sauceKey + "@ondemand.saucelabs.com:443/wd/hub";
151+
}
152+
129153
const config = {
154+
port: options.port,
130155
projectDir: projectDir,
131156
projectBinary: projectBinary,
132157
pluginRoot: pluginRoot,
133158
pluginBinary: pluginBinary,
134-
port: options.port || process.env.npm_config_port || process.env["APPIUM_PORT"] || 4723,
135159
wdaLocalPort: options.wdaLocalPort || process.env.npm_config_wdaLocalPort || process.env["WDA_LOCAL_PORT"] || 8410,
136160
testFolder: options.testFolder || process.env.npm_config_testFolder || "e2e",
137161
runType: options.runType || process.env.npm_config_runType,
138162
appiumCapsLocation: options.appiumCapsLocation || process.env.npm_config_appiumCapsLocation || join(projectDir, options.testFolder, "config", options.capabilitiesName),
139-
isSauceLab: options.sauceLab || process.env.npm_config_sauceLab,
163+
isSauceLab: options.isSauceLab,
140164
verbose: options.verbose || process.env.npm_config_loglevel === "verbose",
141165
appPath: options.appPath || process.env.npm_config_appPath,
142166
storage: options.storage || process.env.npm_config_STORAGE || process.env.STORAGE,
@@ -154,6 +178,7 @@ const config = (() => {
154178
startDeviceOptions: options.startDeviceOptions || process.env.npm_config_startDeviceOptions,
155179
deviceTypeOrPlatform: deviceTypeOrPlatform,
156180
device: options.device || process.env.npm_config_device,
181+
driverConfig: options.driverConfig
157182
};
158183

159184
return config;
@@ -187,4 +212,5 @@ export const {
187212
startDeviceOptions,
188213
deviceTypeOrPlatform: deviceTypeOrPlatform,
189214
device: device,
215+
driverConfig: driverConfig
190216
}: INsCapabilitiesArgs = config;

‎test/device-manager.spec.ts

+20-14
Original file line numberDiff line numberDiff line change
@@ -105,14 +105,15 @@ describe("start Appium server android", async () => {
105105

106106
it("Start server", async () => {
107107
const nsCaps = new NsCapabilities({
108+
port: 8799,
108109
appPath: androidApp,
109110
appiumCaps: {
110111
platformName: Platform.ANDROID,
111112
fullReset: false
112113
},
113114
});
114115
const server: AppiumServer = new AppiumServer(nsCaps);
115-
await server.start(8799);
116+
await server.start(nsCaps.port);
116117
assert.isTrue(server.hasStarted);
117118
await server.stop();
118119
const startTime = Date.now();
@@ -123,15 +124,16 @@ describe("start Appium server android", async () => {
123124
it("Start appium driver", async () => {
124125
const nsCaps = new NsCapabilities({
125126
appPath: androidApp,
127+
port: 9900,
126128
appiumCaps: {
127129
platformName: Platform.ANDROID,
128130
fullReset: true
129131
},
130132
});
131133
const server: AppiumServer = new AppiumServer(nsCaps);
132-
await server.start(9900);
134+
await server.start(nsCaps.port);
133135
assert.isTrue(server.hasStarted);
134-
const driver = await AppiumDriver.createAppiumDriver(server.port, nsCaps);
136+
const driver = await AppiumDriver.createAppiumDriver(nsCaps);
135137
const currentWindowName = AndroidController.getCurrentFocusedScreen(nsCaps.device);
136138
const startTime = Date.now();
137139
while (!currentWindowName.includes("com.tns.NativeScriptActivity") && Date.now() - startTime < 5000) { }
@@ -155,6 +157,7 @@ describe("start Appium server ios", async () => {
155157
it("Start server", async () => {
156158
const nsCaps = new NsCapabilities({
157159
appPath: iosApp,
160+
port: 8799,
158161
appiumCaps: {
159162
platformName: Platform.IOS,
160163
deviceName: /^iPhone 6$/,
@@ -163,7 +166,7 @@ describe("start Appium server ios", async () => {
163166
},
164167
});
165168
const server: AppiumServer = new AppiumServer(nsCaps);
166-
await server.start(8799);
169+
await server.start(nsCaps.port);
167170
assert.isTrue(server.hasStarted);
168171
await server.stop();
169172
const startTime = Date.now();
@@ -173,6 +176,7 @@ describe("start Appium server ios", async () => {
173176

174177
it("Start appium driver", async () => {
175178
const nsCaps = new NsCapabilities({
179+
port: 8822,
176180
appPath: iosApp,
177181
appiumCaps: {
178182
platformName: Platform.IOS,
@@ -183,9 +187,9 @@ describe("start Appium server ios", async () => {
183187
verbose: false
184188
});
185189
const server: AppiumServer = new AppiumServer(nsCaps);
186-
await server.start(8822);
190+
await server.start(nsCaps.port);
187191
assert.isTrue(server.hasStarted);
188-
const driver = await AppiumDriver.createAppiumDriver(server.port, nsCaps);
192+
const driver = await AppiumDriver.createAppiumDriver(nsCaps);
189193
await driver.quit();
190194
await server.stop();
191195
});
@@ -194,6 +198,7 @@ describe("start Appium server ios", async () => {
194198
describe("Start device by apiLevel", async () => {
195199
it("test-start-emulator-apiLevel-6.0", async () => {
196200
const nsCaps = new NsCapabilities({
201+
port: 8799,
197202
runType: "android23",
198203
appPath: androidApp,
199204
appiumCaps: {
@@ -204,8 +209,8 @@ describe("Start device by apiLevel", async () => {
204209
});
205210

206211
const server = new AppiumServer(nsCaps);
207-
await server.start(8799);
208-
const driver = await AppiumDriver.createAppiumDriver(server.port, nsCaps);
212+
await server.start(nsCaps.port);
213+
const driver = await AppiumDriver.createAppiumDriver(nsCaps);
209214
const currentWindowName = AndroidController.getCurrentFocusedScreen(nsCaps.device);
210215
const startTime = Date.now();
211216
while (!currentWindowName.includes("com.tns.NativeScriptActivity") && Date.now() - startTime < 5000) { }
@@ -217,6 +222,7 @@ describe("Start device by apiLevel", async () => {
217222
it("test-start-simulator-apiLevel-12.", async () => {
218223
const nsCaps = new NsCapabilities({
219224
appPath: iosApp,
225+
port: 8887,
220226
appiumCaps: {
221227
platformVersion: /12.||11./,
222228
platformName: Platform.IOS,
@@ -225,8 +231,8 @@ describe("Start device by apiLevel", async () => {
225231
});
226232

227233
const server = new AppiumServer(nsCaps);
228-
await server.start(8887);
229-
const driver = await AppiumDriver.createAppiumDriver(server.port, nsCaps);
234+
await server.start(nsCaps.port);
235+
const driver = await AppiumDriver.createAppiumDriver(nsCaps);
230236

231237
const apps = IOSController.getInstalledApps(nsCaps.device);
232238

@@ -259,7 +265,7 @@ describe("dev-mode-options", async () => {
259265
appPath: iosApp,
260266
});
261267

262-
const appiumDriver = await AppiumDriver.createAppiumDriver(appiumServer.port, nsCaps);
268+
const appiumDriver = await AppiumDriver.createAppiumDriver(nsCaps);
263269
assert.isTrue(appiumDriver.nsCapabilities.device.platform === Platform.IOS);
264270
assert.isDefined(appiumDriver.nsCapabilities.appiumCaps.app);
265271
await appiumDriver.quit();
@@ -270,7 +276,7 @@ describe("dev-mode-options", async () => {
270276
appPath: androidApp
271277
});
272278

273-
const appiumDriver = await AppiumDriver.createAppiumDriver(appiumServer.port, nsCaps);
279+
const appiumDriver = await AppiumDriver.createAppiumDriver(nsCaps);
274280
assert.isTrue(appiumDriver.nsCapabilities.device.platform === Platform.ANDROID);
275281
assert.isDefined(appiumDriver.nsCapabilities.appiumCaps.app);
276282
await appiumDriver.quit();
@@ -281,7 +287,7 @@ describe("dev-mode-options", async () => {
281287
appPath: androidApp
282288
});
283289

284-
const appiumDriver = await AppiumDriver.createAppiumDriver(appiumServer.port, nsCaps);
290+
const appiumDriver = await AppiumDriver.createAppiumDriver(nsCaps);
285291
assert.isTrue(appiumDriver.nsCapabilities.device.platform === Platform.ANDROID);
286292
assert.isDefined(appiumDriver.nsCapabilities.appiumCaps.app);
287293
await appiumDriver.quit();
@@ -292,7 +298,7 @@ describe("dev-mode-options", async () => {
292298
appPath: iosApp
293299
});
294300

295-
const appiumDriver = await AppiumDriver.createAppiumDriver(appiumServer.port, nsCaps);
301+
const appiumDriver = await AppiumDriver.createAppiumDriver(nsCaps);
296302
assert.isTrue(appiumDriver.nsCapabilities.device.platform === Platform.IOS);
297303
assert.isDefined(appiumDriver.nsCapabilities.appiumCaps.app);
298304
await appiumDriver.quit();

0 commit comments

Comments
 (0)
Please sign in to comment.