Selenium在ChromeDriver中没有这样的会话错误

当我从Jenkins运行脚本时,经常遇到这种会话错误。 这是什么原因? 是否有任何连接失败或是由于其他原因(我正在运行大约26个脚本,并且至少有一个脚本没有这样的会话错误)

这些脚本是不同的脚本,不会再为相同的脚本重复这样的会话错误


有时我遇到过这种情况。 我使用ChromeDriver和Laravel Dusk,而不是Selenium。 不过,我相信原因在于ChromeDriver,而不是Selenium

ChromeDriver会在文件夹中创建一些缓存文件: C:Users(yourAccountName)AppDataLocalTemp 。 在此文件夹中,您将看到许多看起来像scoped_dir1234_5678缓存文件夹。 每个文件夹大约占用10MB。 如果Jenkins频繁运行ChromeDriver,则ChromeDriver可能会过度填充临时文件夹中的缓存文件。 您应该考虑C盘上的30-50GB缓存文件,并充分利用C驱动程序。

当我的C盘不在空间时,ChromeDriver将无法启动,然后返回错误消息“Facebook WebDriver Exception NoSuchDriverException:无此类会话”。

解决方案:

  • 去临时文件夹,删除所有的ChromeDriver Cache文件夹可以清理C空间。
  • 创建可以删除/清理ChromeDriver的Cache文件夹的脚本。
  • --UPDATE--

    找到导致问题的另一种情况。

    如果您运行相同的脚本在同一OS上同时在两个不同的实例中启动ChromeDriver,则当一个实例完成并关闭了chromedriver时,另一个chrome浏览器实例也可能会关闭。

    例如,您打开两个控制台并执行chromedriver scrpit,或者您同时启动Jenkins项目。

    我相信,即使你运行不同的脚本,但同时需要使用chromedriver。 由于Chrome浏览器实例关闭,其中一个脚本将“没有这样的会话”。

    解:

  • 在jenkins中安装构建拦截器
  • 在构建拦截器中设置项目,目标项目需要等到它完成。
  • 我的情况是使用没有硒的Laravel黄昏。 我不确定当测试通过硒服务器时是否会有所不同


    我遇到了这个问题,我使用chromediver_binaryselenium进行了python selenium端到端测试。 该错误是由于尝试多次运行driver.close()所致。

    我意识到我的方法被多次调用,我真正想要的是setUpClasstearDownClass 。 我会把我的最终解决方案,因为它避免了这个错误,很好地为我的目的工作。

    class SeleniumTestCase(TestCase):
        """
        A wrapper of TestCase which will launch a selenium server, login, and add
        cookies in the setUp phase of each test.
        """
        @classmethod
        def setUpClass(cls, *args, **kwargs):
            cls.driver = webdriver.Chrome(port=4444)
            cls.driver.implicitly_wait(15)
            cls.driver.maximize_window()
            cls.driver.get(HOST)
            # page obect I wrote which accepts the driver and can login to my app
            cls.login = LoginPage(cls.driver)
            cls.login.log_into_app()
    
        @classmethod
        def tearDownClass(cls):
            cls.driver.close()
    

    这允许我编写测试,如下所示:

    class TestNavigation(SeleniumTestCase):
    
        def setUp(self):
            # Initialize page objects for each test
            self.module1 = Module1Page(self.driver)
            self.module2 = Module2Page(self.driver)
            # launch page
            self.driver.get(HOST)
    
        def test_module1(self):
            self.module1.nav_link.click()
            self.assertEqual(self.module1.title.text, 'Module One')
    
        def test_module2(self):
            self.module2.nav_link.click()
            self.assertEqual(self.module2.title.text, 'Module Two')
    

    其中我在SeleniumTestCase完成的初始登录持续通过了我运行的所有测试,因此我可以编写测试方法来针对单个功能进行定位,正如我以前所做的一样。

    链接地址: http://www.djcxy.com/p/95817.html

    上一篇: Selenium no such session error in ChromeDriver

    下一篇: align: justify text goes outside the border in RTL languages