消息:试图在不建立连接的情况下运行命令

时间:2019-07-16 22:01:54

标签: python-3.x selenium geckodriver

对此表示陌生,对于新手问题深表歉意。

尝试使用Python,Selenium和unittest模块运行脚本。具有典型的setUp(),test_1,test_2,tearDown()方法结构。由于我添加了多个测试,因此出现以下错误:     selenium.common.exceptions.InvalidSessionIdException:消息:试图在不建立连接的情况下运行命令

我该如何解决?

我研究了人们遇到的类似问题,但是在几乎所有情况下,该问题都与我所遇到的任何事情都不相关(例如,cronjobs)

我的程序看起来像这样...

class MyTest(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        #my setup code here...
        cls.driver = webdriver.Firefox(executable_path='my_gecko_driver')
        cls.driver.get('www.my_url.com')
        cls.driver......  # various other tasks

    def test_1(self):
        # my test code here....
        foo = self.driver.find_element_by_xpath('/button_elem/')
        foo.click()
        # etc etc....

    def test_2(self):
        # my test code here....
        bar = self.driver.find_element_by_xpath('/button_elem/')
        bar.click()
        # etc etc....

    @classmethod
    def tearDown(cls):
        print('Entered tearDown function.')
        # close the browser window
        cls.driver.close()


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

在添加第二项测试之前,该测试已成功运行。

现在我得到了错误: selenium.common.exceptions.InvalidSessionIdException:消息:试图在不建立连接的情况下运行命令

我怀疑这与tearDown方法有关,也许无法正常工作?但是,我认为在每次test_x结束时都会调用此方法。

我还注意到Pycharm在“ cls.driver.close()”行中突出显示了“ driver”,对此我也不太确定。它说未解决的属性引用”,但是不是在setUp()方法中创建的吗?

1 个答案:

答案 0 :(得分:0)

在关闭之前尝试在选项卡之间显式切换。

main_page = driver.window_handles[0]  
driver.switch_to.window(main_page)