如何有条理地跳过tearDown进行Webdriver测试

时间:2018-01-15 22:44:46

标签: python-3.x selenium-webdriver python-unittest

我正在使用Python 3和unittest模块进行一些简单的硒测试。我想知道是否有办法在每次测试之间不运行tearDown函数?我知道我可以完全从类中省略tearDown,但这不会在每个测试结果上返回结果。另外,如果我要写第一个测试的第二个测试,我会得到一个例外,说明Safari实例已经与另一个WebDriver会话配对。 以下是我目前的代码。在下面的例子中,我基本上编写了第二个测试,其中包含了第一个测试的步骤。这就是我想避免的。

import unittest
from selenium import webdriver
import time

class Login_Tests(unittest.TestCase):
    username = 'XXXX'
    password = 'XXXX'

    def setUp(self):
        self.driver = webdriver.Safari()

    def test_1_LogIn(self):
        driver = self.driver
        driver.get('PRIVATE URL')
        driver.maximize_window()
        driver.find_element_by_id('j_id0:eCommerceSiteTemplate:j_id14:username').send_keys(self.username)
        driver.find_element_by_id('j_id0:eCommerceSiteTemplate:j_id14:password').send_keys(self.password, '\n')
        time.sleep(4)
        element = driver.find_element_by_xpath('//*[@id="globalHeaderNameMink"]/span/text()').text
        self.assertIn('Chris GExecutive', element)

    def test_2_Store_Load(self):
        driver = self.driver
        driver.get('PRIVATE URL')
        driver.maximize_window()
        driver.find_element_by_id('j_id0:eCommerceSiteTemplate:j_id14:username').send_keys(self.username)
        driver.find_element_by_id('j_id0:eCommerceSiteTemplate:j_id14:password').send_keys(self.password, '\n')
        time.sleep(4)
        driver.find_element_by_css_selector(
            '#bodyCell > div:nth-child(9) > table > tbody > tr:nth-child(3) > td:nth-child(4) > h2 > a').click()
        time.sleep(5)
        elem = driver.find_element_by_css_selector(
            'body > div.container.hidden-phone.deskLayout > header > div.row-fluid.headerRow > '
            'div > div.top_navigation > p > span > span.loginoutsec > a').text
        self.assertIn('Logout', elem)


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

if __name__ == "__main__":
    unittest.main()

1 个答案:

答案 0 :(得分:0)

你真的不想这样做。每项测试都应该是独立的并且是完整的测试。如果您发现在多个测试中重复代码,那么您应该开始使用页面对象模型或创建一些函数,以便您可以增加代码重用。