在单个Appium脚本中能否声明两套desired_cap分别对应混合应用和Chrome?
混合应用跳转Chrome的Appium测试实现方案
不需要声明两套desired_cap,Appium支持在单个driver会话内切换应用上下文/活动,多会话的写法反而容易出现变量未定义、会话冲突等问题,你遇到的__second__未定义报错就是多会话写法导致的变量未初始化问题。
正确实现流程
- 初始化driver时仅配置混合应用的
desired_cap,额外添加Chrome相关适配配置:
必须配置automationName: "UiAutomator2",同时添加chromedriverExecutable参数指定和测试设备上Chrome版本匹配的驱动路径,避免上下文切换失败。 - 点击跳转按钮前,先记录混合应用的包名和活动名,用于后续切回校验:
调用driver.current_package和driver.current_activity即可获取当前应用的对应信息。 - 点击跳转按钮后等待Chrome加载完成,切换到Chrome的web上下文即可进行页面元素验证:
遍历driver.contexts找到WEBVIEW_chrome上下文,切换后可以用常规的web元素定位方法校验页面内容。 - 验证完成后切回原生上下文,调用
driver.back()或者直接启动原混合应用的活动即可回到原应用,继续后续测试。
参考代码示例(Python)
from appium import webdriver from appium.webdriver.common.appiumby import AppiumBy import time # 仅需一套desired_cap desired_caps = { "platformName": "Android", "deviceName": "test", "appPackage": "com.your.hybrid.app", "appActivity": "com.your.hybrid.app.MainActivity", "automationName": "UiAutomator2", "chromedriverExecutable": "/your/path/to/chromedriver", "noReset": True } driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps) # 记录原应用信息 origin_pkg = driver.current_package origin_act = driver.current_activity # 点击跳转按钮 driver.find_element(AppiumBy.ID, "com.your.hybrid.app:id/jump_btn").click() time.sleep(2) # 切换到Chrome上下文 for ctx in driver.contexts: if "chrome" in ctx.lower(): driver.switch_to.context(ctx) break # 验证Chrome页面内容 assert "预期页面标题" in driver.title # 切回原应用 driver.switch_to.context("NATIVE_APP") driver.back() # 确认返回原应用后继续测试 assert driver.current_package == origin_pkg
内容的提问来源于stack exchange,提问作者Claudaette
相关产品推荐
相关产品推荐

