appium-xcuitest-driver
Version:
Appium driver for iOS using XCUITest for backend
124 lines • 4.78 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.TVOS_CAPS = exports.SAFARI_CAPS = exports.SETTINGS_CAPS = exports.GENERIC_CAPS = exports.DEVICE_NAME_FOR_SAFARI_IPAD = exports.DEVICE_NAME = exports.PLATFORM_VERSION = void 0;
exports.amendCapabilities = amendCapabilities;
exports.extractCapabilityValue = extractCapabilityValue;
exports.isIosVersionAtLeast = isIosVersionAtLeast;
exports.isIosVersionBelow = isIosVersionBelow;
exports.getUICatalogCaps = getUICatalogCaps;
exports.getUICatalogSimCaps = getUICatalogSimCaps;
exports.getMultipleApps = getMultipleApps;
exports.getTestAppCaps = getTestAppCaps;
const lodash_1 = __importDefault(require("lodash"));
const support_1 = require("appium/support");
const setup_1 = require("../setup");
// translate integer environment variable to a boolean 0=false, !0=true
function checkFeatureInEnv(envArg) {
/** @type {string|number} */
let feature = parseInt(String(process.env[envArg]), 10);
if (isNaN(feature)) {
feature = String(process.env[envArg]);
}
return !!feature;
}
function amendCapabilities(baseCaps, ...newCaps) {
return support_1.node.deepFreeze({
alwaysMatch: lodash_1.default.cloneDeep(Object.assign({}, baseCaps.alwaysMatch, ...newCaps)),
firstMatch: [{}],
});
}
function extractCapabilityValue(caps, capName) {
return caps?.alwaysMatch?.[capName];
}
exports.PLATFORM_VERSION = process.env.PLATFORM_VERSION || '17.4';
exports.DEVICE_NAME = process.env.DEVICE_NAME || 'iPhone 15';
exports.DEVICE_NAME_FOR_SAFARI_IPAD = process.env.DEVICE_NAME_FOR_SAFARI_IPAD || 'iPad Simulator';
const SHOW_XCODE_LOG = checkFeatureInEnv('SHOW_XCODE_LOG');
const initTimeout = 60 * 1000 * 4;
const prebuiltWdaOpts = process.env.PREBUILT_WDA_PATH
? {
'appium:usePreinstalledWDA': true,
'appium:prebuiltWDAPath': process.env.PREBUILT_WDA_PATH,
} : {};
exports.GENERIC_CAPS = support_1.node.deepFreeze({
alwaysMatch: {
platformName: 'iOS',
'appium:platformVersion': exports.PLATFORM_VERSION,
'appium:deviceName': exports.DEVICE_NAME,
'appium:automationName': 'XCUITest',
'appium:noReset': true,
'appium:maxTypingFrequency': 30,
'appium:clearSystemFiles': true,
'appium:showXcodeLog': SHOW_XCODE_LOG,
'appium:wdaLaunchTimeout': initTimeout,
'appium:wdaConnectionTimeout': initTimeout,
'appium:webviewConnectTimeout': Math.round(initTimeout * 0.8),
'appium:simulatorStartupTimeout': initTimeout,
'appium:forceAppLaunch': true,
...prebuiltWdaOpts,
},
firstMatch: [{}],
});
/**
*
* @param {string} minVersion
* @returns {boolean}
*/
function isIosVersionAtLeast(minVersion) {
return support_1.util.compareVersions(exports.PLATFORM_VERSION, '>=', minVersion);
}
/**
*
* @param {string} minVersion
* @returns {boolean}
*/
function isIosVersionBelow(maxVersion) {
return support_1.util.compareVersions(exports.PLATFORM_VERSION, '<', maxVersion);
}
// Export async getter functions for caps
async function getUICatalogCaps() {
const uiCatalogApp = await (0, setup_1.getUIKitCatalogPath)();
return amendCapabilities(exports.GENERIC_CAPS, {
'appium:app': uiCatalogApp,
});
}
async function getUICatalogSimCaps() {
const uiCatalogApp = await (0, setup_1.getUIKitCatalogPath)();
return amendCapabilities(exports.GENERIC_CAPS, {
'appium:app': uiCatalogApp,
'appium:noReset': false,
}); // do not want to have no reset on the tests that use this
}
async function getMultipleApps() {
const [uiCatalogApp, testApp] = await Promise.all([
(0, setup_1.getUIKitCatalogPath)(),
(0, setup_1.getTestAppPath)(),
]);
return amendCapabilities(exports.GENERIC_CAPS, {
'appium:app': uiCatalogApp,
'appium:otherApps': testApp,
});
}
// Note: Tests should use getUICatalogCaps(), getUICatalogSimCaps(), or getMultipleApps() directly
exports.SETTINGS_CAPS = amendCapabilities(exports.GENERIC_CAPS, {
'appium:bundleId': 'com.apple.Preferences',
});
exports.SAFARI_CAPS = amendCapabilities(exports.GENERIC_CAPS, {
browserName: 'Safari',
'appium:nativeWebTap': false,
});
async function getTestAppCaps() {
const testApp = await (0, setup_1.getTestAppPath)();
return amendCapabilities(exports.GENERIC_CAPS, {
'appium:app': testApp,
});
}
exports.TVOS_CAPS = amendCapabilities(exports.GENERIC_CAPS, {
platformName: 'tvOS',
'appium:bundleId': 'com.apple.TVSettings',
'appium:deviceName': 'Apple TV',
});
//# sourceMappingURL=desired.js.map