打开和关闭 Firefox 浏览器的两个实例

Cod*_*der 0 python selenium

我试图并排打开两个不同的网址。首先如果打开 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()
Run Code Online (Sandbox Code Playgroud)

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

בני*_*כהן 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()
Run Code Online (Sandbox Code Playgroud)