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

问题描述 投票:0回答:2

新手,对于新手问题表示歉意。

尝试使用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() 方法中创建的吗?

python-3.x selenium geckodriver
2个回答
0
投票

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

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

0
投票

这是因为您的计算机上打开了多个浏览器会话。 如果你在 Linux 上运行命令

killall firefox

并尝试再次运行您的脚本。这应该可以为您解决错误。

© www.soinside.com 2019 - 2024. All rights reserved.