我愿意使用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初始化应该在哪里生效?
谢谢,
答案 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
。
希望有所帮助。