如何在不同的浏览器中使用LiveServerTestCase运行selenium测试?

时间:2014-11-08 19:40:22

标签: python django testing selenium

需要在不同的浏览器中连续运行测试(例如,首先在firefox中,然后在chrome中进行相同的测试..)。解决这个问题的最佳方法是什么?

我试图把循环放在setUpClass中,但它确实没有帮助:

class UITest(LiveServerTestCase):

    fixtures = ['initial_test_data.json']

    @classmethod
    def setUpClass(self):
        for browser in [webdriver.Firefox(), webdriver.PhantomJS(), webdriver.Chrome()]:
            self.selenium = browser
            super(UITest, self).setUpClass()

2 个答案:

答案 0 :(得分:3)

为此,我使用简单的装饰器,它通过指定的Web驱动程序运行测试:

import functools


def run_through_drivers(driver_pool='drivers'):
    def wrapped(test_func):
        @functools.wraps(test_func)
        def decorated(test_case, *args, **kwargs):
            test_class = test_case.__class__
            web_driver_pool = getattr(test_class, driver_pool)
            for web_driver in web_driver_pool:
                setattr(test_case, 'selenium', web_driver)
                test_func(test_case, *args, **kwargs)
        return decorated
    return wrapped

使用方法:

class UITest(LiveServerTestCase):

    fixtures = ['initial_test_data.json']
    selenium = None

    @classmethod
    def setUpClass(self):
        cls.drivers = WebDriverList(
            webdriver.Chrome(),
            webdriver.Firefox(),
            webdriver.PhantomJS
        )
        super(UITest, cls).setUpClass()

    @classmethod
    def tearDownClass(cls):
        for driver in cls.drivers:
            driver.quit()
        super(UITest, cls).tearDownClass()

    @run_through_drivers()
    def test_example(self):
        ...

答案 1 :(得分:1)

来自@Alex Lisovoy的上述解决方案似乎取自Evan Lewis解决方案,我发现该解决方案无效。

我能够使用nose_parameterized模块一次测试两个浏览器。请参阅我的回答/示例this other SO question