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

Python Selenium单测通过但多测试执行时后续用例失败问题求助

问题原因排查与解决方案

核心原因:测试用例状态未隔离

你的两个测试用例单独运行正常,但批量运行时后续用例失败,本质是共用的WebDriver实例保留了前一个用例的页面状态,导致第二个用例的初始环境不符合预期。

比如第一个用例执行后,浏览器停留在start_here页面,第二个用例调用website_get()时,可能因为浏览器缓存、未清除的会话(cookies/localStorage),或者页面跳转未完成,导致首页元素无法正常定位,最终引发查找元素失败或断言错误。

具体排查方向与解决方法

1. 检查website_get()的实现

确保该函数能可靠地导航到网站首页并等待页面加载完成,而不是仅执行driver.get(url)就立即返回。建议添加显式等待,等待首页的关键元素(比如导航栏)加载完成:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

def website_get():
    driver.get("你的首页URL")
    # 等待导航栏元素加载完成,确保页面已就绪
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "导航栏的ID"))
    )

2. 隔离WebDriver实例(推荐)

使用测试框架的生命周期钩子(比如pytest的fixture),为每个测试用例创建独立的WebDriver实例,用例结束后销毁:

import pytest
from selenium import webdriver

@pytest.fixture(scope="function")
def driver():
    # 每个用例前初始化driver
    driver = webdriver.Chrome()
    yield driver
    # 每个用例结束后关闭driver
    driver.quit()

def test_start_here_menu(driver):
    website_get(driver)  # 修改函数接收driver参数
    start_here_menu = driver.find_element(By.XPATH,'//*[@id="menu-item-74654"]/a')
    start_here_menu.click()
    # 显式等待目标元素出现
    start_here_logo = WebDriverWait(driver, 10).until(
        EC.visibility_of_element_located((By.XPATH,'//*[@id="post-68110"]/header/div/div/h1'))
    )
    assert start_here_logo.is_displayed()

def test_pantry(driver):
    website_get(driver)
    pantry_menu = driver.find_element(By.XPATH,'//*[@id="menu-item-74656"]/a')
    pantry_menu.click()
    pantry_logo = WebDriverWait(driver, 10).until(
        EC.visibility_of_element_located((By.XPATH,'//*[@id="primary"]/div[1]/div/div[2]/div[1]/h1/span'))
    )
    assert pantry_logo.is_displayed()

3. 重置浏览器状态(资源受限场景备选)

如果不想为每个用例新建driver,就在每个用例执行前清除浏览器会话状态:

def test_start_here_menu():
    driver.delete_all_cookies()
    driver.execute_script("window.localStorage.clear();")
    website_get()
    # 后续测试代码...

def test_pantry():
    driver.delete_all_cookies()
    driver.execute_script("window.localStorage.clear();")
    website_get()
    # 后续测试代码...

4. 优化元素定位方式(可选)

硬编码的XPATH容易因为页面结构变化失效,建议改用更稳定的定位方式,比如元素的id、name或data-testid属性:

# 示例:用id定位菜单
start_here_menu = driver.find_element(By.ID, "menu-item-74654")

内容的提问来源于stack exchange,提问作者בר טאוב

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 17:08:08