1

我愿意使用 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 初始化应该在哪里?

谢谢,

4

1 回答 1

1

这是我的见解。

TestCase我更喜欢基于LiveServerTestCase创建自定义:

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

希望有帮助。

于 2013-06-05T10:29:28.083 回答