Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 8744490

Browse files
author
Zdravko
authored
Merge pull request #261 from NativeScript/svetoslavtsenov/gestures
feat: implement pinch, pan, rotate and scroll
2 parents 0bbb353 + 6f6edce commit 8744490

16 files changed

+366
-162
lines changed

‎lib/appium-driver.ts

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ import {
3030
encodeImageToBase64,
3131
ensureReportsDirExists,
3232
checkImageLogType,
33-
adbShellCommand
33+
adbShellCommand,
34+
logWarn
3435
} from "./utils";
3536

3637
import { INsCapabilities } from "./interfaces/ns-capabilities";
@@ -167,6 +168,11 @@ export class AppiumDriver {
167168
}
168169

169170
public async navBack() {
171+
if (this.isAndroid) {
172+
logInfo("=== Navigate back with hardware button!");
173+
} else {
174+
logInfo("=== Navigate back.");
175+
}
170176
return await this._driver.back();
171177
}
172178

@@ -244,7 +250,7 @@ export class AppiumDriver {
244250
prepareApp(args);
245251
if (!args.device) {
246252
if (args.isAndroid) {
247-
args.device = DeviceManager.getDefaultDevice(args, sessionInfo.capabilities.desired.deviceName, sessionInfo.capabilities.deviceUDID.replace("emulator-", ""), sessionInfo.capabilities.deviceUDID.includes("emulator") ? DeviceType.EMULATOR : DeviceType.SIMULATOR, sessionInfo.capabilities.desired.platformVersion || sessionInfo.capabilities.platformVersion);
253+
args.device = DeviceManager.getDefaultDevice(args, sessionInfo.capabilities.desired.deviceName, sessionInfo.capabilities.deviceUDID.replace("emulator-", ""), sessionInfo.capabilities.deviceUDID.includes("emulator") ? DeviceType.EMULATOR : DeviceType.SIMULATOR, sessionInfo.capabilities.deviceApiLevel || sessionInfo.capabilities.platformVersion);
248254
} else {
249255
args.device = DeviceManager.getDefaultDevice(args);
250256
}
@@ -257,6 +263,8 @@ export class AppiumDriver {
257263
}
258264
} catch (error) {
259265
args.verbose = true;
266+
console.log("===============================");
267+
console.log("", error)
260268
if (!args.ignoreDeviceController && error && error.message && error.message.includes("Failure [INSTALL_FAILED_INSUFFICIENT_STORAGE]")) {
261269
await DeviceManager.kill(args.device);
262270
await DeviceController.startDevice(args.device);
@@ -280,11 +288,11 @@ export class AppiumDriver {
280288
console.log("Retry launching appium driver!");
281289
hasStarted = false;
282290

283-
if (error && error.message && error.message.includes("WebDriverAgent")) {
284-
const freePort = await findFreePort(100, args.wdaLocalPort);
285-
console.log("args.appiumCaps['wdaLocalPort']", freePort);
286-
args.appiumCaps["wdaLocalPort"] = freePort;
287-
}
291+
// if (error && error.message && error.message.includes("WebDriverAgent")) {
292+
// const freePort = await findFreePort(100, args.wdaLocalPort);
293+
// console.log("args.appiumCaps['wdaLocalPort']", freePort);
294+
// args.appiumCaps["wdaLocalPort"] = freePort;
295+
// }
288296
}
289297

290298
if (hasStarted) {
@@ -491,7 +499,7 @@ export class AppiumDriver {
491499
* @param xOffset
492500
*/
493501
public async scroll(direction: Direction, y: number, x: number, yOffset: number, xOffset: number = 0) {
494-
await scroll(this._wd, this._driver, direction, this._webio.isIOS, y, x, yOffset, xOffset,this._args.verbose);
502+
await scroll(this._wd, this._driver, direction, this._webio.isIOS, y, x, yOffset, xOffset);
495503
}
496504

497505
/**
@@ -509,13 +517,15 @@ export class AppiumDriver {
509517
while ((el === null || !isDisplayed) && retryCount > 0) {
510518
try {
511519
el = await element();
512-
isDisplayed = await el.isDisplayed();
520+
isDisplayed = el&&await el.isDisplayed();
513521
if (!isDisplayed) {
514-
await scroll(this._wd, this._driver, direction, this._webio.isIOS, startPoint.y, startPoint.x, offsetPoint.x, offsetPoint.y,this._args.verbose);
522+
await scroll(this._wd, this._driver, direction, this._webio.isIOS, startPoint.y, startPoint.x, offsetPoint.y, offsetPoint.x);
515523
el = null;
516524
}
517525
} catch (error) {
518526
console.log("scrollTo Error: " + error);
527+
await scroll(this._wd, this._driver, direction, this._webio.isIOS, startPoint.y, startPoint.x, offsetPoint.y, offsetPoint.x);
528+
el = null;
519529
}
520530

521531
retryCount--;
@@ -864,7 +874,7 @@ export class AppiumDriver {
864874
}
865875
}
866876

867-
private static async applyAdditionalSettings(args) {
877+
private static async applyAdditionalSettings(args: INsCapabilities) {
868878
if (args.isSauceLab) return;
869879

870880
args.appiumCaps['udid'] = args.appiumCaps['udid'] || args.device.token;
@@ -881,6 +891,11 @@ export class AppiumDriver {
881891
args.appiumCaps["wdaStartupRetries"] = 5;
882892
args.appiumCaps["shouldUseSingletonTestManager"] = args.appiumCaps.shouldUseSingletonTestManager;
883893

894+
if (args.derivedDataPath) {
895+
args.appiumCaps["derivedDataPath"] = `${args.derivedDataPath}/${args.device.token}`;
896+
logWarn('Changed derivedDataPath to: ', args.appiumCaps["derivedDataPath"]);
897+
}
898+
884899
// It looks we need it for XCTest (iOS 10+ automation)
885900
if (args.appiumCaps.platformVersion >= 10 && args.wdaLocalPort) {
886901
console.log(`args.appiumCaps['wdaLocalPort']: ${args.wdaLocalPort}`);

‎lib/appium-server.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ export class AppiumServer {
126126

127127
private startAppiumServer(logLevel: string, isSauceLab: boolean) {
128128
const startingServerArgs: Array<string> = isSauceLab ? ["--log-level", logLevel] : ["-p", this.port.toString(), "--log-level", logLevel];
129-
if (this._args.isAndroid&&this._args.ignoreDeviceController&&!this._args.isSauceLab) {
129+
if (this._args.isAndroid) {
130130
this._args.relaxedSecurity ? startingServerArgs.push("--relaxed-security") : console.log("'relaxedSecurity' is not enabled!\nTo enabled it use '--relaxedSecurity'!");
131131
}
132132

‎lib/device-manager.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ export class DeviceManager implements IDeviceManager {
171171
type: type,
172172
platform: args.appiumCaps.platformName.toLowerCase(),
173173
token: token,
174-
apiLevel: platformVersion || args.appiumCaps.platformVersion,
174+
apiLevel: platformVersion || args.appiumCaps.deviceApiLevel||args.appiumCaps.platformVersion,
175175
config: { "density": args.appiumCaps.density, "offsetPixels": args.appiumCaps.offsetPixels }
176176
}
177177

@@ -197,7 +197,7 @@ export class DeviceManager implements IDeviceManager {
197197
const sizeArr = sessionInfoDetails.deviceScreenSize.split("x");
198198
args.device.deviceScreenSize = { width: sizeArr[0], height: sizeArr[1] };
199199

200-
args.device.apiLevel = sessionInfoDetails.deviceApiLevel;
200+
args.device.apiLevel = sessionInfoDetails.deviceApiLevel||args.device.apiLevel;
201201
args.device.deviceScreenDensity = sessionInfoDetails.deviceScreenDensity / 100;
202202
args.device.config = { "density": args.device.deviceScreenDensity || args.device.config.density, "offsetPixels": +sessionInfoDetails.statBarHeight || args.device.config.offsetPixels };
203203
} else {
@@ -209,6 +209,7 @@ export class DeviceManager implements IDeviceManager {
209209

210210
args.device.statBarHeight = sessionInfoDetails.statBarHeight;
211211
args.device.viewportRect = DeviceManager.convertViewportRectToIRectangle(sessionInfoDetails.viewportRect);
212+
args.device.token = args.device.token || sessionInfoDetails.udid;
212213

213214
return args.device;
214215
}
@@ -217,14 +218,14 @@ export class DeviceManager implements IDeviceManager {
217218
const status = value ? 1 : 0;
218219
try {
219220
if (args.isAndroid) {
220-
if (!args.ignoreDeviceController) {
221-
AndroidController.setDontKeepActivities(value, args.device);
222-
} else if (args.relaxedSecurity) {
221+
if (args.relaxedSecurity) {
223222
const output = await DeviceManager.executeShellCommand(driver, { command: "settings", args: ['put', 'global', 'always_finish_activities', status] });
224223
console.log(`Output from setting always_finish_activities to ${status}: ${output}`);
225224
//check if set
226225
const check = await DeviceManager.executeShellCommand(driver, { command: "settings", args: ['get', 'global', 'always_finish_activities'] });
227226
console.info(`Check if always_finish_activities is set correctly: ${check}`);
227+
} else if (!args.ignoreDeviceController) {
228+
AndroidController.setDontKeepActivities(value, args.device);
228229
}
229230
} else {
230231
// Do nothing for iOS ...

‎lib/direction.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
export declare constenum Direction {
1+
export declare enum Direction {
22
down = 0,
33
up = 1,
44
left = 2,

‎lib/direction.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
export constenum Direction {
1+
export enum Direction {
22
down,
33
up,
44
left,

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { AutomationName } from "../automation-name";
44
import { ITestReporter } from "./test-reporter";
55
import { LogImageType } from "../enums/log-image-type";
66
export interface INsCapabilitiesArgs {
7+
derivedDataPath?: string;
78
port?: number;
89
wdaLocalPort?: number;
910
projectDir?: string;

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { ITestReporter } from "./test-reporter";
55
import { LogImageType } from "../enums/log-image-type";
66

77
export interface INsCapabilitiesArgs {
8+
derivedDataPath?: string;
89
port?: number;
910
wdaLocalPort?: number;
1011
projectDir?: string;

‎lib/ns-capabilities.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ export declare class NsCapabilities implements INsCapabilities {
4747
deviceTypeOrPlatform: string;
4848
driverConfig: any;
4949
logImageTypes: Array<LogImageType>;
50+
derivedDataPath: string;
5051
constructor(_parser: INsCapabilitiesArgs);
5152
readonly isAndroid: any;
5253
readonly isIOS: boolean;

‎lib/ns-capabilities.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ export class NsCapabilities implements INsCapabilities {
5353
public deviceTypeOrPlatform: string;
5454
public driverConfig: any;
5555
public logImageTypes: Array<LogImageType>;
56+
public derivedDataPath: string;
5657

5758
constructor(private _parser: INsCapabilitiesArgs) {
5859
this.projectDir = this._parser.projectDir;
@@ -76,6 +77,7 @@ export class NsCapabilities implements INsCapabilities {
7677
this.isSauceLab = this._parser.isSauceLab;
7778
this.ignoreDeviceController = this._parser.ignoreDeviceController;
7879
this.wdaLocalPort = this._parser.wdaLocalPort;
80+
this.derivedDataPath = this._parser.derivedDataPath;
7981
this.path = this._parser.path;
8082
this.capabilitiesName = this._parser.capabilitiesName;
8183
this.imagesPath = this._parser.imagesPath;

‎lib/parser.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
import { LogImageType } from "./enums/log-image-type";
2-
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, logImageTypes: LogImageType[], appiumCaps: any;
2+
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, derivedDataPath: string,path: string, relaxedSecurity: boolean, cleanApp: boolean, attachToDebug: boolean, sessionId: string, startSession: boolean, capabilitiesName: string, imagesPath: string, startDeviceOptions: string, deviceTypeOrPlatform: string, device: any, driverConfig: any, logImageTypes: LogImageType[], appiumCaps: any;

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /