Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit d612a8f

Browse files
committedOct 2, 2019
fix(ios): ios13 statusbar height
1 parent 183727e commit d612a8f

File tree

6 files changed

+29
-16
lines changed

6 files changed

+29
-16
lines changed
 

‎lib/appium-driver.d.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,6 @@ export declare class AppiumDriver {
271271
getScreenViewPort(): IRectangle;
272272
/**
273273
* Android ONLY! Input key event via ADB.
274-
* Must be combined with '--relaxed-security' appium flag. When not running in sauceLabs '--ignoreDeviceController' should be added too.
275274
* @param keyEvent The event number
276275
*/
277276
adbKeyEvent(keyEvent: number | AndroidKeyEvent): Promise<void>;

‎lib/appium-driver.ts

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ import {
1111
DeviceController,
1212
IDevice,
1313
DeviceType,
14-
AndroidController
14+
AndroidController,
15+
IOSController
1516
} from "mobile-devices-controller";
1617
import {
1718
addExt,
@@ -47,6 +48,7 @@ import { DeviceOrientation } from "./enums/device-orientation";
4748
import { NsCapabilities } from "./ns-capabilities";
4849
import { AutomationName } from "./automation-name";
4950
import { AndroidKeyEvent } from "mobile-devices-controller";
51+
import { setInterval } from "timers";
5052

5153
export class AppiumDriver {
5254
private _defaultWaitTime: number = 5000;
@@ -215,10 +217,11 @@ export class AppiumDriver {
215217

216218
let hasStarted = false;
217219
let retries = 10;
220+
let sessionInfoDetails;
221+
218222
while (retries > 0 && !hasStarted) {
219223
try {
220224
let sessionInfo;
221-
let sessionInfoDetails;
222225
try {
223226
if (args.sessionId || args.attachToDebug) {
224227
const sessionInfos = JSON.parse(((await getSessions(args.port)) || "{}") + '');
@@ -311,7 +314,19 @@ export class AppiumDriver {
311314
await driver.updateSettings(appiumCapsFromConfig.settings);
312315
}
313316

314-
return new AppiumDriver(driver, wd, webio, args.driverConfig, args);
317+
if (+sessionInfoDetails.statBarHeight === 0
318+
&& sessionInfoDetails.platformName.toLowerCase() === "ios"
319+
&& sessionInfoDetails.platformVersion.startsWith("13")) {
320+
try {
321+
const devicesInfos = IOSController.devicesDisplaysInfos();
322+
const matches = devicesInfos.filter(d => sessionInfoDetails.deviceName.includes(d.deviceType));
323+
const deviceType = matches[matches.length - 1];
324+
args.device.viewportRect.y += deviceType.statBarHeight * deviceType.density;
325+
} catch (error) { }
326+
}
327+
328+
const appiumDriver = new AppiumDriver(driver, wd, webio, args.driverConfig, args);
329+
return appiumDriver;
315330
}
316331

317332
public async updateSettings(settings: any) {
@@ -1011,23 +1026,22 @@ export class AppiumDriver {
10111026
public getScreenViewPort(): IRectangle {
10121027
const rect = this.getScreenActualViewPort();
10131028
if (rect
1029+
&& this.isIOS
10141030
&& Object.getOwnPropertyNames(rect).length > 0
1015-
&& this._args.appiumCaps.device.deviceScreenDensity) {
1031+
&& this._args.device.deviceScreenDensity) {
10161032
return <IRectangle>{
1017-
x: rect.x / this._args.appiumCaps.device.deviceScreenDensity,
1018-
y: rect.y / this._args.appiumCaps.device.deviceScreenDensity,
1019-
width: rect.width / this._args.appiumCaps.device.deviceScreenDensity,
1020-
height: rect.height / this._args.appiumCaps.device.deviceScreenDensity,
1033+
x: rect.x / this._args.device.deviceScreenDensity,
1034+
y: rect.y / this._args.device.deviceScreenDensity,
1035+
width: rect.width / this._args.device.deviceScreenDensity,
1036+
height: rect.height / this._args.device.deviceScreenDensity,
10211037
}
10221038
} else {
1023-
logError("Device's density is undefined!");
10241039
return rect;
10251040
}
10261041
}
10271042

10281043
/**
10291044
* Android ONLY! Input key event via ADB.
1030-
* Must be combined with '--relaxed-security' appium flag. When not running in sauceLabs '--ignoreDeviceController' should be added too.
10311045
* @param keyEvent The event number
10321046
*/
10331047
public async adbKeyEvent(keyEvent: number | AndroidKeyEvent) {

‎lib/device-manager.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ export declare class DeviceManager implements IDeviceManager {
1313
static getInstalledApps(device: IDevice): Promise<string[]>;
1414
static getDefaultDevice(args: INsCapabilities, deviceName?: string, token?: string, type?: DeviceType, platformVersion?: number): IDevice;
1515
private static convertViewportRectToIRectangle;
16-
static applyAppiumSessionInfoDetails(args: INsCapabilities, sessionInfoDetails: any): IDevice;
16+
static applyAppiumSessionInfoDetails(args: INsCapabilities, sessionInfoDetails: any): any;
1717
static setDontKeepActivities(args: INsCapabilities, driver: any, value: any): Promise<void>;
1818
static executeShellCommand(driver: any, commandArgs: {
1919
command: string;

‎lib/device-manager.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ export class DeviceManager implements IDeviceManager {
261261
if (args.device.name.includes(k)) {
262262
args.device.config = {
263263
density: args.device.config['density'] || v.density,
264-
offsetPixels: v.actionBarHeight
264+
offsetPixels: v.actionBarHeight * (args.device.config['density'] || v.density)
265265
};
266266
}
267267
});
@@ -289,7 +289,7 @@ export class DeviceManager implements IDeviceManager {
289289
args.device.config['offsetPixels'] = AndroidController.calculateScreenOffset(args.device.config.density);
290290
}
291291

292-
if (!density) {
292+
if (!density && !args.isIOS) {
293293
await DeviceManager.getDensity(args, driver);
294294
density = args.device.config.density
295295
args.device.config['offsetPixels'] = AndroidController.calculateScreenOffset(args.device.config.density);

‎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: import("mobile-devices-controller/lib/device").IDevice, 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, 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;

‎package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
"frame-comparer": "^2.0.1",
3737
"glob": "^7.1.0",
3838
"inquirer": "^6.2.0",
39-
"mobile-devices-controller": "^5.0.0",
39+
"mobile-devices-controller": "^5.1.0",
4040
"wd": "~1.11.3",
4141
"webdriverio": "~4.14.0",
4242
"yargs": "~12.0.5"

0 commit comments

Comments
 (0)
Please sign in to comment.