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

Selenium单会话场景下执行多个测试用例相关问题咨询

问题原因

  • unittest框架默认setUp()、tearDown()方法的执行规则是:每执行一个test开头的测试用例前跑一次setUp,每执行完一个测试用例后跑一次tearDown。你的代码里每次tearDown都会调用driver.quit()关闭浏览器,下一个用例启动时setUp又会初始化全新的浏览器实例,自然没有之前的登录状态,还会反复开关浏览器。

解决方案

用类级别的初始化/销毁方法setUpClass()、tearDownClass()替换原来的实例方法,这两个方法在整个测试类的所有用例执行前后只会各执行一次,所有测试用例共用同一个浏览器实例,只会在所有用例全部跑完后才关闭浏览器。

注意事项

  • setUpClass、tearDownClass必须加@classmethod装饰器,操作的是类属性而非实例属性
  • unittest默认按测试方法名的ASCII码顺序执行用例,要保证登录用例test_SignIn排在其他业务用例前面执行,避免未登录就执行业务操作

修改后代码

import unittest
import time
from selenium import webdriver
# 注意导入你自己的LoginPage、ValueCalculator类

class BaseTest(unittest.TestCase):
    """A sample test class to show how page object works"""

    @classmethod
    def setUpClass(cls):
        # 整个测试类启动时只初始化一次浏览器
        cls.driver = webdriver.Chrome("/usr/lib/chromium-browser/chromedriver")
        cls.driver.implicitly_wait(30)
        cls.driver.get("===========")
        cls.driver.maximize_window()

    def test_SignIn(self):
        driver = self.driver
        Login = LoginPage(driver)
        Login.enterEmail('any@gmail.com')
        Login.enterPassword('abc123')
        Login.clickSignIn()
        time.sleep(10)

    def test_ValueCalculator(self):
        driver = self.driver
        calculateValue = ValueCalculator(driver)
        calculateValue.enterSalary('kkk')
        calculateValue.enterSalarydifference('kkk')
        calculateValue.clickSubmit()
        time.sleep(10)

    @classmethod
    def tearDownClass(cls):
        # 所有测试用例全部跑完后才关闭浏览器
        cls.driver.quit()

if __name__ == "__main__":
    unittest.main()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:27:03