Skip to content

Commit 3e7263d

Browse files
Vasil ChimevSvetoslavTsenov
authored andcommitted
feat: expose isAndroid and isIOS (#62)
* feat: expose isAndroid and isIOS * refactor: expose isAndroid and isIOS
1 parent 9e3e30c commit 3e7263d

10 files changed

+48
-23
lines changed

lib/appium-driver.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ export declare class AppiumDriver {
3131
readonly elementHelper: ElementHelper;
3232
readonly locators: Locator;
3333
readonly isAlive: boolean;
34+
readonly isAndroid: boolean;
35+
readonly isIOS: boolean;
3436
readonly driver: any;
3537
webio(): any;
3638
wd(): any;

lib/appium-driver.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,10 @@ export class AppiumDriver {
4141
private _storage: string;
4242

4343
private constructor(private _driver: any, private _wd, private _webio: any, private _driverConfig, private _args: INsCapabilities) {
44-
this._elementHelper = new ElementHelper(this._args.appiumCaps.platformName.toLowerCase(), this._args.appiumCaps.platformVersion.toLowerCase());
44+
this._elementHelper = new ElementHelper(this._args);
4545
this._imageHelper = new ImageHelper(this._args);
4646
this._isAlive = true;
47-
this._locators = new Locator(this._args.appiumCaps.platformName, this._args.appiumCaps.platformVersion);
47+
this._locators = new Locator(this._args);
4848
this._webio.requestHandler.sessionID = this._driver.sessionID;
4949
}
5050

@@ -84,6 +84,14 @@ export class AppiumDriver {
8484
return this._isAlive;
8585
}
8686

87+
get isAndroid() {
88+
return this._args.isAndroid;
89+
}
90+
91+
get isIOS() {
92+
return this._args.isIOS;
93+
}
94+
8795
get driver() {
8896
return this._driver;
8997
}

lib/element-helper.d.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1+
import { INsCapabilities } from "./ins-capabilities";
12
export declare class ElementHelper {
2-
private _platform;
3-
private _platformVersion;
3+
private _args;
44
private locators;
5-
private isAndroid;
6-
constructor(_platform: string, _platformVersion: number);
5+
constructor(_args: INsCapabilities);
76
getXPathElement(name: any): void;
87
getXPathByText(text: any, exactMatch: any): string;
98
getXPathWithExactText(text: any): string;

lib/element-helper.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
import { contains } from "./utils";
22
import { log } from "./utils";
3+
import { INsCapabilities } from "./ins-capabilities";
34
import { Locator } from "./locators";
45

56
export class ElementHelper {
67

7-
private locators : Locator;
8+
private locators: Locator;
89

9-
private isAndroid: boolean;
10-
constructor(private _platform: string, private _platformVersion: number) {
11-
this.isAndroid = this._platform === "android";
12-
this.locators = new Locator(this._platform, this._platformVersion)
10+
constructor(private _args: INsCapabilities) {
11+
this.locators = new Locator(this._args)
1312
}
1413

1514
public getXPathElement(name) {
@@ -31,19 +30,19 @@ export class ElementHelper {
3130

3231
public findByTextLocator(controlType, value, exactMatch) {
3332
let artbutes = ["label", "value", "hint"];
34-
if (this.isAndroid) {
33+
if (this._args.isAndroid) {
3534
artbutes = ["content-desc", "resource-id", "text"];
3635
}
3736

3837
let searchedString = "";
3938
if (exactMatch) {
40-
if (this.isAndroid) {
39+
if (this._args.isAndroid) {
4140
artbutes.forEach((atr) => { searchedString += "translate(@" + atr + ",'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')='" + value.toLowerCase() + "'" + " or " });
4241
} else {
4342
artbutes.forEach((atr) => { searchedString += "@" + atr + "='" + value + "'" + " or " });
4443
}
4544
} else {
46-
if (this.isAndroid) {
45+
if (this._args.isAndroid) {
4746
artbutes.forEach((atr) => { searchedString += "contains(translate(@" + atr + ",'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'),'" + value.toLowerCase() + "')" + " or " });
4847
} else {
4948
artbutes.forEach((atr) => { searchedString += "contains(@" + atr + ",'" + value + "')" + " or " });

lib/ins-capabilities.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ export interface INsCapabilities {
1010
appiumCaps: any;
1111
testFolder: string;
1212
runType: string;
13+
isAndroid: boolean;
14+
isIOS: boolean;
1315
isSauceLab: boolean;
1416
appPath: string;
1517
emulatorOptions: string;

lib/ins-capabilities.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,14 @@ export interface INsCapabilities {
1111
appiumCaps: any;
1212
testFolder: string;
1313
runType: string;
14+
isAndroid: boolean;
15+
isIOS: boolean;
1416
isSauceLab: boolean;
1517
appPath: string;
1618
emulatorOptions: string;
1719
storage: string;
1820
testReports: string;
1921
reuseDevice: boolean;
20-
device:IDevice;
22+
device: IDevice;
2123
ignoreDeviceController: boolean;
2224
}

lib/locators.d.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1+
import { INsCapabilities } from "./ins-capabilities";
12
export declare class Locator {
2-
private _platformName;
3-
private _platformVersion;
3+
private _args;
44
private _elementsList;
5-
constructor(_platformName: string, _platformVersion: any);
5+
constructor(_args: INsCapabilities);
66
readonly button: string;
77
readonly listView: string;
88
readonly image: string;

lib/locators.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ export class Locator {
44

55
private _elementsList: Map<string, string>;
66

7-
constructor(private _platformName: string, private _platformVersion) {
7+
constructor(private _args: INsCapabilities) {
88
this._elementsList = new Map<string, string>();
9-
if (this._platformName.toLowerCase().includes("android")) {
9+
if (this._args.isAndroid) {
1010
this.loadAndroidElements();
1111
} else {
1212
this.loadIOSElements();
@@ -105,7 +105,7 @@ export class Locator {
105105

106106
private createIosElement(element) {
107107
let elementType = "UIA";
108-
if (parseFloat(this._platformVersion) >= 10) {
108+
if (parseFloat(this._args.appiumCaps.platformVersion) >= 10) {
109109
elementType = "XCUIElementType";
110110
}
111111

lib/ns-capabilities.d.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ export declare class NsCapabilities implements INsCapabilities {
1414
private _testReports;
1515
private _reuseDevice;
1616
private _runType;
17+
private _isAndroid;
18+
private _isIOS;
1719
private _isSauceLab;
1820
private _appPath;
1921
private _emulatorOptions;
@@ -34,11 +36,14 @@ export declare class NsCapabilities implements INsCapabilities {
3436
readonly testReports: any;
3537
readonly reuseDevice: any;
3638
readonly runType: any;
39+
readonly isAndroid: any;
40+
readonly isIOS: any;
3741
readonly isSauceLab: any;
3842
appPath: string;
3943
readonly ignoreDeviceController: boolean;
4044
device: IDevice;
4145
readonly emulatorOptions: string;
46+
private isAndroidPlatform();
4247
private resolveAppPath();
4348
private checkMandatoryCapabiliies();
4449
private throwExceptions();

lib/ns-capabilities.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ export class NsCapabilities implements INsCapabilities {
1818
private _testReports;
1919
private _reuseDevice;
2020
private _runType;
21+
private _isAndroid;
22+
private _isIOS;
2123
private _isSauceLab;
2224
private _appPath: string;
2325
private _emulatorOptions: string;
@@ -34,14 +36,16 @@ export class NsCapabilities implements INsCapabilities {
3436
this._port = parser.port;
3537
this._verbose = parser.verbose;
3638
this._appiumCapsLocation = parser.appiumCapsLocation;
39+
this._appiumCaps = resolveCapabilities(this._appiumCapsLocation, parser.runType, parser.projectDir);
3740
this._testFolder = parser.testFolder;
3841
this._storage = parser.storage;
3942
this._testReports = parser.testReports;
4043
this._reuseDevice = parser.reuseDevice;
4144
this._runType = parser.runType;
45+
this._isAndroid = this.isAndroidPlatform();
46+
this._isIOS = !this._isAndroid;
4247
this._isSauceLab = parser.isSauceLab;
4348
this._ignoreDeviceController = parser.ignoreDeviceController;
44-
this._appiumCaps = resolveCapabilities(this._appiumCapsLocation, parser.runType, parser.projectDir);
4549
this.resolveAppPath();
4650
this.checkMandatoryCapabiliies();
4751
this.throwExceptions();
@@ -60,6 +64,8 @@ export class NsCapabilities implements INsCapabilities {
6064
get testReports() { return this._testReports; }
6165
get reuseDevice() { return this._reuseDevice; }
6266
get runType() { return this._runType; }
67+
get isAndroid() { return this._isAndroid; }
68+
get isIOS() { return this._isIOS; }
6369
get isSauceLab() { return this._isSauceLab; }
6470
get appPath() { return this._appPath; }
6571
get ignoreDeviceController() { return this._ignoreDeviceController; }
@@ -68,6 +74,8 @@ export class NsCapabilities implements INsCapabilities {
6874
set device(device: IDevice) { this._device = device; }
6975
get emulatorOptions() { return (this._emulatorOptions || "-wipe-data -gpu on") }
7076

77+
private isAndroidPlatform() { return this._appiumCaps.platformName.toLowerCase().includes("android"); }
78+
7179
private resolveAppPath() {
7280
if (this._appPath) {
7381
this._appiumCaps.app = this._appPath;
@@ -92,7 +100,7 @@ export class NsCapabilities implements INsCapabilities {
92100
this.exceptions.push("Platform name is missing! Please, check appium capabilities file!");
93101
}
94102

95-
if (!this._appiumCaps.platformName) {
103+
if (!this._appiumCaps.platformVersion) {
96104
this.exceptions.push("Platform version is missing! Please, check appium capabilities file!");
97105
}
98106

0 commit comments

Comments
 (0)