0

我正在尝试并排打开两个不同的网址。首先如果打开 url1 进行一些检查 然后它应该打开 url2 并进行一些检查 然后它应该在完成测试后关闭 url1 和 url2

我已经能够打开两个 url1 和 url2,但 tearDown 只关闭 url2。

我希望我的 tearDown 关闭两个网址。

这是我尝试过的代码

class Login(unittest.TestCase):

    site_url1 = "https://www.google.com/"
    site_url2 = "https://www.facebook.com/"

    def setUp(self):
        # create a new Firefox session
        self.browser = webdriver.Firefox()
        browser = self.browser
        browser.get(self.site_url1)

    def more_loggin(self):
        # create a new Firefox session
        self.browser = webdriver.Firefox()
        browser = self.browser
        browser.get(self.site_url2)            

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

上面的代码只是关闭site_url2,我希望它也关闭另一个url。似乎 self.browser 具有 site_url2 的值,因此无法关闭另一个。我该如何解决?

4

1 回答 1

5

这是因为您self.browser每次调用时都设置了setUpor more_loggin。这意味着,如果您调用一个函数,比如说setUp()然后您调用more_loggin,您将丢失由Firefox创建的实例setUp,并self.browser获得一个在 开始时创建的新实例more_loggin

当您调用 时tearDown,只有存储在其中的最后一个实例self.browser会关闭,而其他所有实例都将保持打开状态。

我建议您将所有实例保存在一个列表中,在类级别定义,然后tearDown遍历每个实例并关闭它。

class Login(unittest.TestCase):

    instances = []

    site_url1 = "https://www.google.com/"
    site_url2 = "https://www.facebook.com/"

    def openFirefox(self):
        # create a new Firefox session        
        firefox = webdriver.Firefox()
        # save session in instances        
        self.instances.append(firefox)
        # return the session    
        return firefox

    def setUp(self):
        browser = self.openFirefox()
        browser.open(self.site_url1)

    def more_loggin(self):
        browser = self.openFirefox()
        browser.open(self.site_url2)

    def tearDown(self):
        for browser in self.instances:
            # close every instance in instances        
            browser.quit()
于 2019-06-26T02:16:48.367 回答