Skip to content

Commit 9e5e599

Browse files
refactor: createDriver
1 parent 76396fd commit 9e5e599

17 files changed

+245
-196
lines changed

index.d.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { IDeviceManager } from "./lib/interfaces/device-manager";
22
import * as frameComparerHelper from "./lib/frame-comparer";
3+
import { INsCapabilitiesArgs } from "./lib/interfaces/ns-capabilities-args";
34
export { AppiumDriver } from "./lib/appium-driver";
45
export { AppiumServer } from "./lib/appium-server";
56
export { ElementHelper } from "./lib/element-helper";
@@ -13,9 +14,11 @@ export { FrameComparer } from "./lib/frame-comparer";
1314
export { IRectangle } from "./lib/interfaces/rectangle";
1415
export { IDeviceManager } from "./lib/interfaces/device-manager";
1516
export { LogType } from "./lib/log-types";
17+
export { INsCapabilities } from "./lib/interfaces/ns-capabilities";
18+
export { INsCapabilitiesArgs } from "./lib/interfaces/ns-capabilities-args";
1619
export declare function startServer(port?: number, deviceManager?: IDeviceManager): Promise<void>;
1720
export declare function stopServer(): Promise<void>;
18-
export declare function createDriver(): Promise<any>;
21+
export declare function createDriver(args?: INsCapabilitiesArgs): Promise<any>;
1922
/**
2023
* Provide instance of FrameComparer in order to compare frames/ images from video
2124
* Please read carefully README.md before using it.

index.ts

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@ import * as frameComparerHelper from "./lib/frame-comparer";
66
import { FrameComparer } from "./lib/frame-comparer";
77
import { DeviceManager } from "./lib/device-manager";
88
import { DeviceController } from "mobile-devices-controller";
9-
import { logInfo, logError } from "./lib/utils";
9+
import { logInfo, logError, logWarn } from "./lib/utils";
10+
import { INsCapabilities } from "./lib/interfaces/ns-capabilities";
11+
import { INsCapabilitiesArgs } from "./lib/interfaces/ns-capabilities-args";
12+
import * as parser from "./lib/parser"
1013

1114
export { AppiumDriver } from "./lib/appium-driver";
1215
export { AppiumServer } from "./lib/appium-server";
@@ -21,8 +24,10 @@ export { FrameComparer } from "./lib/frame-comparer";
2124
export { IRectangle } from "./lib/interfaces/rectangle";
2225
export { IDeviceManager } from "./lib/interfaces/device-manager";
2326
export { LogType } from "./lib/log-types";
27+
export { INsCapabilities } from "./lib/interfaces/ns-capabilities";
28+
export { INsCapabilitiesArgs } from "./lib/interfaces/ns-capabilities-args";
2429

25-
const nsCapabilities = new NsCapabilities();
30+
const nsCapabilities: INsCapabilities = new NsCapabilities({ ...<INsCapabilities>parser });
2631
const appiumServer = new AppiumServer(nsCapabilities);
2732
let frameComparer: FrameComparer;
2833
let appiumDriver = null;
@@ -64,7 +69,7 @@ if (nsCapabilities.startSession) {
6469
}
6570

6671
export async function startServer(port?: number, deviceManager?: IDeviceManager) {
67-
await appiumServer.start(port || nsCapabilities.port, deviceManager);
72+
await appiumServer.start(port, deviceManager);
6873
await attachToExitProcessHoockup(appiumServer.server, "appium");
6974
}
7075

@@ -81,13 +86,18 @@ export async function stopServer() {
8186
}
8287
};
8388

84-
export async function createDriver() {
89+
export async function createDriver(args?: INsCapabilitiesArgs) {
90+
if (args) {
91+
nsCapabilities.extend(args);
92+
}
93+
const port = nsCapabilities.port || appiumServer.port;
94+
8595
if (nsCapabilities.attachToDebug) {
86-
appiumDriver = await AppiumDriver.createAppiumDriver(appiumServer.port, nsCapabilities);
96+
appiumDriver = await AppiumDriver.createAppiumDriver(port, nsCapabilities);
8797
return appiumDriver;
8898
}
8999
if (!appiumServer.server) {
90-
throw new Error("Server is not available!");
100+
logWarn("Server is not available!");
91101
}
92102
if (!nsCapabilities.appiumCapsLocation) {
93103
throw new Error("Provided path to appium capabilities is not correct!");
@@ -99,7 +109,7 @@ export async function createDriver() {
99109
if (appiumDriver !== null && appiumDriver.isAlive) {
100110
return appiumDriver;
101111
} else if (appiumDriver === null) {
102-
appiumDriver = await AppiumDriver.createAppiumDriver(appiumServer.port, nsCapabilities);
112+
appiumDriver = await AppiumDriver.createAppiumDriver(port, nsCapabilities);
103113
} else if (appiumDriver !== null && !appiumDriver.isAlive) {
104114
await appiumDriver.init();
105115
}

lib/appium-driver.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
export declare var should: any;
1+
export declare const should: any;
22
import { ElementHelper } from "./element-helper";
33
import { SearchOptions } from "./search-options";
44
import { UIElement } from "./ui-element";

lib/appium-driver.ts

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
var chai = require("chai");
21
import * as wd from "wd";
3-
var chaiAsPromised = require("chai-as-promised");
2+
import * as webdriverio from "webdriverio";
3+
const chai = require("chai");
4+
const chaiAsPromised = require("chai-as-promised");
45
chai.use(chaiAsPromised);
5-
export var should = chai.should();
6+
export const should = chai.should();
67
chaiAsPromised.transferPromiseness = wd.transferPromiseness;
78

8-
import { ChildProcess } from "child_process";
99
import { ElementHelper } from "./element-helper";
1010
import { SearchOptions } from "./search-options";
1111
import { UIElement } from "./ui-element";
@@ -16,8 +16,7 @@ import {
1616
DeviceController,
1717
IDevice,
1818
DeviceType,
19-
AndroidController,
20-
IOSController
19+
AndroidController
2120
} from "mobile-devices-controller";
2221
import {
2322
addExt,
@@ -42,7 +41,6 @@ import { Point } from "./point";
4241
import { ImageHelper } from "./image-helper";
4342
import { ImageOptions } from "./image-options"
4443
import { unlinkSync, writeFileSync } from "fs";
45-
import * as webdriverio from "webdriverio";
4644
import { DeviceManager } from "../lib/device-manager";
4745
import { extname, basename } from "path";
4846
import { LogType } from "./log-types";
@@ -180,6 +178,10 @@ export class AppiumDriver {
180178
port: port
181179
};
182180

181+
if(!args.isValidated){
182+
args.validateArgs();
183+
}
184+
183185
if (args.isSauceLab) {
184186
const sauceUser = process.env.SAUCE_USER || process.env.npm_config["SAUCE_USER"];
185187
const sauceKey = process.env.SAUCE_KEY || process.env.npm_config["SAUCE_KEY"];
@@ -194,6 +196,9 @@ export class AppiumDriver {
194196
log("Creating driver!", args.verbose);
195197

196198
if (!args.attachToDebug && !args.sessionId) {
199+
if (!args.device) {
200+
args.device = DeviceManager.getDefaultDevice(args);
201+
}
197202
await AppiumDriver.applyAdditionalSettings(args);
198203
}
199204

lib/appium-server.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ export class AppiumServer {
2626
constructor(private _args: INsCapabilities) {
2727
this._runType = this._args.runType;
2828
this._hasStarted = false;
29+
this._port = _args.port;
2930
this.resolveAppiumDependency();
3031
}
3132

@@ -58,6 +59,10 @@ export class AppiumServer {
5859
}
5960

6061
public async start(port, deviceManager: IDeviceManager = new DeviceManager()) {
62+
if(!this._args.isValidated){
63+
this._args.validateArgs();
64+
this._args.port = port;
65+
}
6166
this._args.deviceManager = deviceManager;
6267
if (!this._args.attachToDebug && !this._args.sessionId) {
6368
await this.prepDevice(deviceManager);

lib/automation-name.d.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
export declare enum AutomationName {
2+
UiAutomator2 = "UIAutomator2",
3+
Appium = "Appium",
4+
XCUITest = "XCUITest"
5+
}

lib/automation-name.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
export enum AutomationName {
2+
UiAutomator2 = "UIAutomator2",
3+
Appium = "Appium",
4+
XCUITest = "XCUITest",
5+
}

lib/interfaces/ins-capabilities.d.ts

Lines changed: 0 additions & 21 deletions
This file was deleted.
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import { IDevice } from "mobile-devices-controller";
2+
import { IDeviceManager } from "./device-manager";
3+
import { AutomationName } from "../automation-name";
4+
export interface INsCapabilitiesArgs {
5+
port?: number;
6+
wdaLocalPort?: number;
7+
projectDir?: string;
8+
projectBinary?: string;
9+
pluginRoot?: string;
10+
pluginBinary?: string;
11+
testFolder?: string;
12+
sessionId?: string;
13+
appiumCapsLocation?: string;
14+
runType?: string;
15+
appPath?: string;
16+
appName?: string;
17+
emulatorOptions?: string;
18+
storage?: string;
19+
testReports?: string;
20+
path?: string;
21+
capabilitiesName?: string;
22+
attachToDebug?: boolean;
23+
startSession?: boolean;
24+
verbose?: boolean;
25+
isAndroid?: boolean;
26+
isIOS?: boolean;
27+
isSauceLab?: boolean;
28+
reuseDevice?: boolean;
29+
ignoreDeviceController?: boolean;
30+
relaxedSecurity?: boolean;
31+
devMode?: boolean;
32+
cleanApp?: boolean;
33+
isValidated?: boolean;
34+
appiumCaps?: any;
35+
device?: IDevice;
36+
automationName?: AutomationName;
37+
deviceManager?: IDeviceManager;
38+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import { IDevice } from "mobile-devices-controller";
2+
import { IDeviceManager } from "./device-manager";
3+
import { AutomationName } from "../automation-name";
4+
5+
export interface INsCapabilitiesArgs {
6+
port?: number;
7+
wdaLocalPort?: number;
8+
projectDir?: string;
9+
projectBinary?: string;
10+
pluginRoot?: string;
11+
pluginBinary?: string;
12+
testFolder?: string;
13+
sessionId?: string;
14+
appiumCapsLocation?: string;
15+
runType?: string;
16+
appPath?: string;
17+
appName?: string;
18+
emulatorOptions?: string;
19+
storage?: string;
20+
testReports?: string;
21+
path?: string;
22+
capabilitiesName?: string;
23+
attachToDebug?: boolean;
24+
startSession?: boolean;
25+
verbose?: boolean;
26+
isAndroid?: boolean;
27+
isIOS?: boolean;
28+
isSauceLab?: boolean;
29+
reuseDevice?: boolean;
30+
ignoreDeviceController?: boolean;
31+
relaxedSecurity?: boolean,
32+
devMode?: boolean;
33+
cleanApp?: boolean,
34+
isValidated?: boolean,
35+
appiumCaps?: any;
36+
device?: IDevice;
37+
automationName?: AutomationName;
38+
deviceManager?: IDeviceManager;
39+
}

0 commit comments

Comments
 (0)