2014-11-08 2 views
2

Нужно запускать тесты в разных браузерах подряд (то есть сначала в firefox, следующие же тесты в хром ..). Каков наилучший способ решить эту проблему?Как запустить тесты селена с использованием LiveServerTestCase в разных браузерах?

Im пытается поставить петлю в 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() 

ответ

3

Для этого я использую простой декоратор, который проходит испытания по определенным веб-водителей:

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): 
     ... 
+0

Более полное [решение] (https://groups.google.com/d/msg/django-users/Sckf9y2xIho/mwLTr8YyNDkJ) от Эвана Льюиса. –

+0

awesome, спасибо! – aphex

1

Вышеупомянутое решение от @Alex Lisovoy, по-видимому, взято из e Решение Эвана Льюиса, которое я нашел, не сработало.

Я смог сразу проверить два браузера с помощью модуля nose_parameterized. См. Мой ответ/пример this other SO question.

Смежные вопросы