gst-atom-xcuitest-driver
Version:
ATOM driver for iOS using XCUITest for backend
118 lines (91 loc) • 4.48 kB
JavaScript
import _ from 'lodash';
import { iosCommands } from 'gst-atom-ios-driver';
import { errors } from 'gst-atom-base-driver';
let extensions = {};
Object.assign(extensions, iosCommands.execute);
const iosExecute = extensions.execute;
extensions.execute = async function execute (script, args) {
if (!script.match(/^mobile:/) && !this.isWebContext()) {
throw new errors.NotImplementedError();
}
return await iosExecute.call(this, script, args);
};
extensions.executeAsync = async function executeAsync (script, args) {
if (!this.isWebContext()) {
throw new errors.NotImplementedError();
}
args = this.convertElementsForAtoms(args);
this.asyncWaitMs = this.asyncWaitMs || 0;
const promise = this.remote.executeAtomAsync('execute_async_script', [script, args, this.asyncWaitMs], this.curWebFrames);
return await this.waitForAtom(promise);
};
// Overrides the 'executeMobile' function defined in gst-atom-ios-driver
extensions.executeMobile = async function executeMobile (mobileCommand, opts = {}) {
const commandMap = {
//region gestures support
tap: 'mobileTap',
scroll: 'mobileScroll',
selectPickerWheelValue: 'mobileSelectPickerWheelValue',
// https://developer.apple.com/documentation/xctest/xcuielement/1618668-swipeleft?language=objc
// https://developer.apple.com/documentation/xctest/xcuielement/1618674-swiperight?language=objc
// https://developer.apple.com/documentation/xctest/xcuielement/1618667-swipeup?language=objc
// https://developer.apple.com/documentation/xctest/xcuielement/1618664-swipedown?language=objc
swipe: 'mobileSwipe',
// https://developer.apple.com/documentation/xctest/xcuielement/1618669-pinchwithscale?language=objc
pinch: 'mobilePinch',
// https://developer.apple.com/documentation/xctest/xcuielement/1618673-doubletap?language=objc
doubleTap: 'mobileDoubleTap',
// https://developer.apple.com/documentation/xctest/xcuielement/1618675-twofingertap?language=objc
twoFingerTap: 'mobileTwoFingerTap',
// https://developer.apple.com/documentation/xctest/xcuielement/1618671-tapwithnumberoftaps?language=objc
tapWithNumberOfTaps: 'mobileTapWithNumberOfTaps',
// https://developer.apple.com/documentation/xctest/xcuielement/1618663-pressforduration?language=objc
touchAndHold: 'mobileTouchAndHold',
// https://developer.apple.com/documentation/xctest/xcuielement/1618670-pressforduration?language=objc
dragFromToForDuration: 'mobileDragFromToForDuration',
// https://developer.apple.com/documentation/xctest/xcuielement/1618665-rotate?language=objc
rotateElement: 'mobileRotateElement',
//endregion gestures support
alert: 'mobileHandleAlert',
setPasteboard: 'mobileSetPasteboard',
getPasteboard: 'mobileGetPasteboard',
source: 'mobileGetSource',
getContexts: 'mobileGetContexts',
//region multiple apps management
installApp: 'mobileInstallApp',
isAppInstalled: 'mobileIsAppInstalled',
removeApp: 'mobileRemoveApp',
launchApp: 'mobileLaunchApp',
terminateApp: 'mobileTerminateApp',
queryAppState: 'mobileQueryAppState',
activateApp: 'mobileActivateApp',
//endregion multiple apps management
viewportScreenshot: 'getViewportScreenshot',
startPerfRecord: 'mobileStartPerfRecord',
stopPerfRecord: 'mobileStopPerfRecord',
installCertificate: 'mobileInstallCertificate',
startLogsBroadcast: 'mobileStartLogsBroadcast',
stopLogsBroadcast: 'mobileStopLogsBroadcast',
batteryInfo: 'mobileGetBatteryInfo',
deviceInfo: 'mobileGetDeviceInfo',
getDeviceTime: 'mobileGetDeviceTime',
activeAppInfo: 'mobileGetActiveAppInfo',
pressButton: 'mobilePressButton',
enrollBiometric: 'mobileEnrollBiometric',
sendBiometricMatch: 'mobileSendBiometricMatch',
isBiometricEnrolled: 'mobileIsBiometricEnrolled',
clearKeychains: 'mobileClearKeychains',
getPermission: 'mobileGetPermission',
setPermission: 'mobileSetPermissions',
getAppearance: 'mobileGetAppearance',
setAppearance: 'mobileSetAppearance',
siriCommand: 'mobileSiriCommand',
deleteFile: 'mobileDeleteFile',
deleteFolder: 'mobileDeleteFolder',
};
if (!_.has(commandMap, mobileCommand)) {
throw new errors.UnknownCommandError(`Unknown mobile command '${mobileCommand}'. Only ${_.keys(commandMap).join(', ')} commands are supported.`);
}
return await this[commandMap[mobileCommand]](opts);
};
export default extensions;