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

Python Selenium测试Google页面时遇InvalidSessionIdException求助

问题原因

你遇到的InvalidSessionIdException是因为测试类共用的driver在第一个测试执行完就被关闭了:

  • setUpClass是类级别初始化,整个测试类仅创建一次driver实例
  • tearDown会在每个测试用例执行后调用,其中的self.driver.close()会关闭当前浏览器窗口、销毁session
  • 后续测试用例再调用已被关闭的driver,必然触发无效session ID错误
  • 隐式等待无法解决该问题,它仅用于等待元素加载,无法恢复已销毁的session
解决方案

有两种常用修复方式,可根据需求选择:

方案1:类级别复用driver(推荐,执行更快)

将关闭driver的操作移到tearDownClass(类级别清理),每个测试用例执行后仅重置页面,不关闭浏览器:

class GoogleSearchTest(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.driver = webdriver.Chrome()
        cls.driver.maximize_window()

    def setUp(self):
        self.driver.get("https://www.google.com/")

    def tearDown(self):
        # 每个测试后重置页面,无需关闭driver
        self.driver.delete_all_cookies()
        self.driver.get("about:blank")

    @classmethod
    def tearDownClass(cls):
        # 整个测试类执行完毕后再关闭driver
        cls.driver.quit()

    # 测试用例代码保持不变...

方案2:每个测试用例独立创建driver

若需要每个测试完全隔离,可在setUp中创建driver,tearDown中关闭:

class GoogleSearchTest(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.maximize_window()
        self.driver.get("https://www.google.com/")

    def tearDown(self):
        self.driver.quit()

    # 测试用例代码保持不变...
额外注意点
  • 优先使用driver.quit()而非driver.close():close()仅关闭当前窗口,quit()会彻底终止driver会话、释放资源
  • 你的GoogleSearchPage类在__init__时直接查找search_box,可能因页面未加载完成报错,建议改为延迟查找的属性方法:
class GoogleSearchPage:
    def __init__(self, driver):
        self.driver = driver

    @property
    def search_box(self):
        return self.driver.find_element("name", "q")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 20:45:12