我在哪里使用Selenium在django.test中在Django中初始化我的webdriver

时间:2013-05-27 09:03:02

标签: django selenium selenium-webdriver django-testing django-tests

我愿意使用Selenium测试我的Django应用程序。根据我的阅读,Django已经涵盖了测试部分并允许您编写自己的测试。

愿意与Selenium一起使用,这是我的<application>/test.py

from some.path.to.my.utilitary.module import TestTools


class FormTestCase(TestCase):
    def setUp(self):
        self.webui = TestTools()

    def test_advanced_settings(self):
        self.webui.go_to('home')
        self.webui.click('id', 'button-advanced-settings')
        self.webui.click('id', 'id_setting_0')
        self.webui.click('id', 'id_setting_1')
        self.webui.click('id', 'id_setting_2')
        self.webui.click('id', 'id_setting_3', submit=True)

    def test_zone_selector(self):
        self.webui.go_to('home')
        self.webui.click('id', 'button-zone-selector')

我编写了一个Python类,我在其中实现了Selenium逻辑(TestTools),因此我可以专注于在我的Django应用程序中编写测试代码:

class TestTools():
    def __init__(self):
        self.driver = webdriver.Firefox(...)
        ...

    # Those methods use self.driver to do things

    def click(...):
        ...

    def go_to(...):
        ...

    def quit(...):
        ...

我注意到我无法覆盖__init__孩子中的TestCase方法,因此我将self.webui = TestTools()放在setUp方法中。但是,它被调用两次(我猜测每种测试方法),因此创建了2个webdrivers。

我想要做的是运行./manage test,只打开一个浏览器并运行我的所有测试。 webdriver初始化应该在哪里生效?

谢谢,

1 个答案:

答案 0 :(得分:1)

这是我的见解。

我更喜欢根据LiveServerTestCase创建自定义TestCase

class SeleniumTestCase(LiveServerTestCase):
    """
    A base test case for selenium, providing different helper methods.
    """

    def setUp(self):
        self.driver = WebDriver()

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

    def open(self, url):
        self.driver.get("%s%s" % (self.live_server_url, url))

然后,我的所有测试用例都来自这个SeleniumTestCase

希望有所帮助。