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
相关产品推荐
相关产品推荐

