【发布时间】:2017-06-16 06:31:14
【问题描述】:
我正在解决我在使用 Selenium 和 Python 3.5 时遇到的问题。我正在尝试将 unittest 框架实现到我的自动化中,但是每当我创建测试套件时,测试会在实际执行测试用例之前打开多个浏览器窗口。
通过排除过程,我将其归结为这部分代码:
def primary():
primary = unittest.TestSuite()
primary.addTest(unittest.makeSuite(PrimaryMethods, 'setUp'))
primary.addTest(unittest.makeSuite(PrimaryMethods, 'test_ModuleLoop_header'))
primary.addTest(unittest.makeSuite(PrimaryMethods, 'test_ModuleLoop_nonheader'))
primary.addTest(unittest.makeSuite(PrimaryMethods, 'tearDown'))
return primary
if __name__ == '__main__':
TEST_RUNNER = unittest.TextTestRunner()
TEST_SUITE = primary()
TEST_RUNNER.run(primary)
当我删除创建测试套件的部分并仅在 if 语句中使用 unittest.main() 时,它仅在一个浏览器窗口中运行良好。但是,我知道随着我的测试用例变得越来越复杂,我会想开始使用测试套件。有谁知道在继续测试用例之前,其中的什么会使 setUp 自行运行 4 次?
这是我的设置和拆解部分:
def setUp(self):
driver = webdriver.Firefox
init () #for colorama
def tearDown(self):
driver = webdriver.Firefox
driver.close()
driver.quit()
我取出正在运行的代码并将其修改回包含 def primary() 和 TEST_RUNNER.run(primary) 代码。我从 setUp 部分中删除了 init() 调用,因此除了加载浏览器之外,setUp 中没有任何内容。当我在整个脚本中放置断点时,这是我看到的行为:
- def setUp(self) 在开始时立即调用
- def setUp(self) 再次调用
- 如果 name == 'main' 和 def primary() 被调用
- driver = webdriver.Firefox 被调用
- 第一个浏览器打开
- driver = webdriver.Firefox 被第二次调用。两个测试用例和tearDown都没有动。
- 第二个浏览器打开
- tearDown(self) 被调用。
- 第二个浏览器已关闭
- driver = webdriver.Firefox 被第三次调用。
- 第三个浏览器打开
- tearDown(self) 被调用
- 第三个浏览器关闭
- driver = webdriver.Firefox 被第四次调用。
- 第一个测试用例终于开始了
【问题讨论】:
-
发布其余代码,或至少足以提供相关上下文。您提到问题是“启动浏览器”,该代码在哪里?
-
我将我的设置添加到主要问题中。
-
我建议发布一个显示问题的可运行代码的完整示例,而不是它的点点滴滴
标签: python unit-testing selenium