You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

切换iframe第二次触发TimeoutException,pytest导航夹具仅首次可用

问题解决:pytest导航切换夹具仅首次有效,后续触发超时错误

问题核心原因

你的夹具首次运行正常,但后续执行时抛出selenium.common.exceptions.TimeoutException,主要是两个问题:

  • 首次切换到iframe后未切回主文档,后续用例执行时driver仍停留在旧iframe上下文,无法定位新的目标iframe
  • 直接点击元素未等待加载完成,元素未就绪时触发定位失败

修复后的夹具代码

@pytest.fixture()
def navigateToQueue(setup, request):
    queuename = request.param
    # 先切回主文档,保证每次操作从主页面开始
    setup.switch_to.default_content()
    
    # 等待并切换到目标iframe
    WebDriverWait(setup, 20).until(
        EC.frame_to_be_available_and_switch_to_it((By.XPATH, "//iframe[@title='Issuance']")))
    
    # 等待菜单按钮可点击后再点击
    menu_btn = WebDriverWait(setup, 10).until(
        EC.element_to_be_clickable((By.XPATH, "//mat-icon[contains(text(),'menu')]")))
    menu_btn.click()
    
    # 等待目标导航项加载完成并可点击
    queue_item = WebDriverWait(setup, 10).until(
        EC.element_to_be_clickable((By.XPATH, f"//span[contains(text(),'{queuename}')]")))
    queue_item.click()
    
    # 操作完成后切回主文档,避免影响后续用例
    setup.switch_to.default_content()

额外排查建议

  • 确认setup夹具的作用域:如果是模块/会话级,driver状态会被保留,建议改为函数级(每次用例重新初始化driver)
  • 检查页面切换导航栏后是否有刷新,可在点击后增加页面稳定的等待逻辑(如等待某个页面特征元素出现)
  • 验证iframe的定位表达式是否唯一,避免多个匹配项导致切换错误

内容的提问来源于stack exchange,提问作者Emon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 12:40:12