import os from ..utils import CoreConfig class MobileHelper: @classmethod def get_wda_port(cls) -> int: worker = os.getenv("PYTEST_XDIST_WORKER").replace("qw", "") port = 8100 if worker.isdigit(): port += int(worker) return port @classmethod def get_iphone_device_name(cls) -> str: worker = os.getenv("PYTEST_XDIST_WORKER").replace("qw", "") default_device = "iPhone 12 Pro Max" return { "0": default_device, "1": "iPhone 8 Plus", "2": "iPhone 8", "3": "iPhone 11 Pro", "4": "iPhone 11", }.get(worker, default_device) @classmethod def get_capabilities(cls): from ui_automation_framework.core.webdriver_factory import BrowserStackMobileDriver capabilities = { "language": CoreConfig.LANG, "automationName": "XCUITest", "platformName": CoreConfig.PLATFORM, "platformVersion": CoreConfig.IOS_VERSION, "autoAcceptAlerts": True, "newCommandTimeout": 2500, "interKeyDelay": 30, "maxTypingFrequency": 45, "settings[snapshotMaxDepth]": 62 } if CoreConfig.BROWSER_NAME in (BrowserStackMobileDriver.BS_IOS, BrowserStackMobileDriver.BS_ANDROID): capabilities.update({ "app": CoreConfig.IOS_APP_PATH, "deviceName": CoreConfig.IOS_DEVICE, "bstack:options": { "projectName": CoreConfig.IOS_APP_PATH, "userName": CoreConfig.BROWSERSTACK_APP_USER, "accessKey": CoreConfig.BROWSERSTACK_APP_KEY, "appiumVersion": CoreConfig.APPIUM_VERSION, "idleTimeout": 3000, "networkLogs": True, "video": True, "buildName": CoreConfig.IOS_APP_PATH, "sessionName": CoreConfig.JENKINS_JOB_NAME, } }) return capabilities capabilities.update({ "app": os.path.abspath(CoreConfig.APP_NAME), "deviceName": cls.get_iphone_device_name(), "wdaLocalPort": cls.get_wda_port(), }) return capabilities