unittest.TestCase 子类的子类,使用不同的 setUpClass 类方法

2 投票
1 回答
864 浏览
提问于 2025-04-20 12:42

我现在有一个叫做unittest.TestCase的子类,用来运行我的selenium测试:

class FunctionalTest(unittest.TestCase):

    @classmethod
    def setUpClass(self):
        self.browser = webdriver.Firefox()
        self.browser.implicitly_wait(1)

    @classmethod    
    def tearDownClass(self):
        self.browser.close()

    def method1(self):
        #some code here

    def method2(self):
        #some code here

我想在这个类(FunctionalTest)的基础上再创建一个子类,目的是修改setUpClass这个方法,让火狐浏览器禁用javascript,但我还想继续使用FunctionalTest里的其他方法:

    @classmethod
    def setUpClass(self):
        profile = webdriver.FirefoxProfile()
        profile.set_preference("javascript.enabled", False);
        self.browser = webdriver.Firefox(profile)              
        self.browser.implicitly_wait(1)

像下面这样创建子类并没有成功:

FunctionalTestNoJS(FunctionalTest):
    @classmethod
    def setUpClass(self):
        profile = webdriver.FirefoxProfile()
        profile.set_preference("javascript.enabled", False);
        self.browser = webdriver.Firefox(profile)              
        self.browser.implicitly_wait(1)

有没有什么好主意可以有效地实现这个目标?

1 个回答

0

这个对我有效,我不太确定为什么要用@classmethod,但就这样吧..

import unittest
from selenium import webdriver
from datetime import datetime


class FunctionalTest(unittest.TestCase):
    def setUp(self):
        self.browser = webdriver.Firefox()
        self.browser.implicitly_wait(1)
        self.browser.maximize_window()

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

    def test_method1(self):
        self.browser.get("http://javatester.org/javascript.html")
        now = datetime.now().strftime('%Y-%m-%d_%H-%M-%S-%f')
        self.browser.get_screenshot_as_file('%s_%s.png' % (self.__class__.__name__, now))


class FunctionalTestNoJS(FunctionalTest):
    def setUp(self):
        profile = webdriver.FirefoxProfile()
        profile.set_preference("javascript.enabled", False);
        self.browser = webdriver.Firefox(profile)              
        self.browser.implicitly_wait(1)
        self.browser.maximize_window()

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

撰写回答