【问题标题】:Subclass of a subclass of unittest.TestCase, with a different setUpClass classmethodunittest.TestCase的一个子类的子类,具有不同的setUpClass类方法
【发布时间】:2014-09-08 18:54:08
【问题描述】:

我目前有一个 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 方法以禁用 Firefox 浏览器的 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)

关于如何有效地解决这个问题的任何想法?

【问题讨论】:

  • 在这种情况下定义“不工作”?
  • 重写类方法正常,见docs.python.org/3/library/…
  • 尝试删除@classmethod?该方法不应该被命名为 setUp() 吗?
  • @d_rez90:不,它是一个类方法,每个TestCase 类运行一次。
  • 其实最近升级的火狐是我Selenium测试失败的根源;我虽然新测试不起作用 b/c 我的子类化不正确。

标签: python class selenium python-unittest


【解决方案1】:

这对我有用,我不确定使用@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()

【讨论】:

  • 其实最近升级的火狐是我Selenium测试失败的根源;我虽然新测试不起作用 b/c 我的子类化不正确。
  • 感谢您的代码,我正在寻找类似的东西。它也解决了我的问题
猜你喜欢
  • 1970-01-01
  • 2018-10-29
  • 1970-01-01
  • 2012-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-28
  • 2018-12-27
相关资源
最近更新 更多