Chromedriver在测试完成后不删除临时文件夹中的作用域*目录

Kar*_*thi 15 selenium selenium-chromedriver selenium-webdriver

由于chromedriver在执行结束时没有删除名为scoped_*的文件夹,因此最新的chromedriver.exe会因磁盘空间问题而运行.它占用了近20 GB的空间用于400次测试.我尝试了2.28和2.29版本的chromedriver.我正在使用driver.close()和driver.Quit()正确退出驱动程序.Chrome浏览器版本为57.

小智 10

我通过在退出驱动程序后添加以"scoped_dir"开头的临时文件夹的删除来管理这个:

 public static void teardown_()
        {
            // quit driver
            if (driver != null)
                driver.Quit();

            // delete all "scoped_dir" temp folders 
            string tempfolder = System.IO.Path.GetTempPath();
            string[] tempfiles = Directory.GetDirectories(tempfolder, "scoped_dir*", SearchOption.AllDirectories);
            foreach (string tempfile in tempfiles)
            {
                try
                {
                    System.IO.DirectoryInfo directory = new System.IO.DirectoryInfo(tempfolder);
                    foreach (System.IO.DirectoryInfo subDirectory in directory.GetDirectories()) subDirectory.Delete(true);
                }
                catch (Exception ex)
                {
                    writeEx("File '" + tempfile + "' could not be deleted:\r\n" +
                            "Exception: " + ex.Message + ".");
                }
            }
        } 
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你!

  • 此策略适用于同步执行,但如果您使用并行**chromedriver**作业,您将踩踏正在运行的`chromedriver.exe`进程并导致问题. (4认同)

cdz*_*zar 9

这是一个已知的错误,将使用Chromedriver 2.30 https://bugs.chromium.org/p/chromedriver/issues/detail?id=644修复

这似乎是ChromeDriver和Chrome之间的竞争条件.ChromeDriver会创建这些临时目录供Chrome使用,最后ChromeDriver会尝试删除这些目录.ChromeDriver等待主要Chrome进程在删除之前终止,但某些Chrome子进程可能仍在运行并保留这些目录,从而导致删除失败.目前ChromeDriver不会重试删除.

删除Daniel提到的临时文件可能是一个临时解决方案,但我会在Chromedriver 2.30发布后立即将其删除.


更新

Chromedriver 2.30已经出局,应该解决这个问题.

  • 2020 年和 84 版,这一切正在发生。 (2认同)

Sli*_*SFT 5

使用最新的chromedriver 2.30.1并没有解决我的问题 -%TEMP%在运行并行selenium作业时,我的目录中的存储空间一直不足。

最好的解决方案是userDataDir通过Chrome 选项进行控制,并在使用后自行处理该目录driver.quit()

如果您的进程是同步的,那么上面的 @cdzar 解决方案就可以工作,但是对于并行作业,您确实需要自己控制目录创建/处置。

您可以在此处查看其他 chromium 命令行开关