Appium Python Client v3.0.0中launch_app()替代方案求助
解决Appium Python Client v3.0.0中launch_app()废弃后的应用启动问题
核心替代方案:使用activate_app()方法
在Appium Python Client v3.x版本中,launch_app()已被标记为废弃,官方推荐使用activate_app()方法强制启动或激活指定应用,只需传入目标应用的包名即可:
# 替换原有的self.driver.launch_app() self.driver.activate_app(f'{APP_PACKAGE}{envPackage}')
优化Capabilities配置,从根源解决启动异常
如果不使用强制启动方法就无法正常启动应用,大概率是Capabilities配置存在疏漏,可以调整以下参数:
- 添加启动等待配置:明确指定Appium会话初始化时需要等待的应用包和页面活动,确保应用完全启动后再执行后续操作:
desiredCapabilities["appium:appWaitPackage"] = f'{APP_PACKAGE}{envPackage}' desiredCapabilities["appium:appWaitActivity"] = APP_ACTIVITY desiredCapabilities["appium:appWaitDuration"] = 30000 # 等待时长(毫秒),可按需调整 - 检查
noReset参数场景:如果noReset=True导致应用残留状态影响启动,可以在需要重置时临时改为noReset=False,或搭配fullReset=True(注意:该参数会清除应用本地数据)。
备用方案:通过ADB命令强制启动
如果上述方法仍不生效,可直接调用ADB命令启动应用:
app_package = f'{APP_PACKAGE}{envPackage}' start_command = f'am start -n {app_package}/{APP_ACTIVITY}' self.driver.execute_script('mobile: shell', {'command': start_command})
修改后的完整代码示例
class MyAPP: @log def __init__(self,device_name:str=DEVICE_NAME, environment:str=DEFAULT_ENVIRONMENT)->None: self.environment = environment envPackage = '.staging' if environment=="Staging" else '' app_package = f'{APP_PACKAGE}{envPackage}' desiredCapabilities = {} desiredCapabilities["appium:deviceName"] = device_name desiredCapabilities["appium:automationName"] = AUTOMATION_NAME desiredCapabilities["appium:platformName"] = PLATFORM_NAME desiredCapabilities["appium:platformVersion"] = ANDROID_VERSION desiredCapabilities["appium:appPackage"] = app_package desiredCapabilities["appium:appActivity"] = APP_ACTIVITY # 添加启动等待配置 desiredCapabilities["appium:appWaitPackage"] = app_package desiredCapabilities["appium:appWaitActivity"] = APP_ACTIVITY desiredCapabilities["appium:appWaitDuration"] = 30000 desiredCapabilities["appium:instrumentApp"] = True desiredCapabilities["appium:ensureWebviewsHavePages"] = True desiredCapabilities["appium:nativeWebScreenshot"] = True desiredCapabilities["appium:newCommandTimeout"] = NEW_COMMAND_TIMEOUT desiredCapabilities["appium:connectHardwareKeyboard"] = True desiredCapabilities["appium:noReset"] = True options = UiAutomator2Options() options.load_capabilities(desiredCapabilities) # 启动会话 self.driver = webdriver.Remote(SERVER_URL, options=options) # 替代废弃的launch_app(),强制激活应用 self.driver.activate_app(app_package)
内容的提问来源于stack exchange,提问作者Tester
相关产品推荐
相关产品推荐

