为什么 Selenium 总是使用 Web 驱动程序创建临时 Firefox 配置文件?

Ras*_*sel 5 firefox selenium webdriver selenium-chromedriver geckodriver

为什么 Selenium 总是使用 Web 驱动程序创建临时 Firefox 配置文件,尽管我告诉它使用现有的配置文件?

根据这个答案,不可能阻止 Selenium 使用 Web 驱动程序创建临时 Firefox 配置文件。但使用 chromedriver 我可以实现这一点。那么为什么 Firefox 会有所不同呢?我检查了Selenium repoFirefoxProfile.cs,发现以下代码snipet用于复制配置文件---

public void WriteToDisk()
    {
        this.profileDir = GenerateProfileDirectoryName();
        if (!string.IsNullOrEmpty(this.sourceProfileDir))
        {
            FileUtilities.CopyDirectory(this.sourceProfileDir, this.profileDir);
        }
        else
        {
            Directory.CreateDirectory(this.profileDir);
        }

        this.InstallExtensions();
        this.DeleteLockFiles();
        this.DeleteExtensionsCache();
        this.UpdateUserPreferences();
    }
Run Code Online (Sandbox Code Playgroud)

但对于chorme来说没有这样的东西。

是不是因为webdriver安装了扩展程序(webdriver.xpi)来与firefox通信,而chromedriver.exe用于与chrome交互。

如果这是原因,则在 3.0 版本中,webdriver 使用 geckodriver.exe 与 Firefox 进行通信。那么在 3.0 版本之后,webdriver 会不再为 firefox 创建临时配置文件吗?

更新: 今天我玩了 webdriver v 3.0+,发现关闭legacymode的最新版本仍然生成名为rust_mozprofile.wUqPXh48avDR的临时配置文件。我的假设是这个临时配置文件是由geckodriver.exe生成的,它是用Rust编写的

我三年前使用过 chromedriver,不确定chromedriver.exe是否也会生成此类类型的临时文件。期待专家解答...

Jim*_*ans 2

Firefox 驱动程序使用临时配置文件的主要原因是支持运行多个独立的并发 Firefox 实例的用例。曾经,当 Firefox 启动时,它会在配置文件目录中放置一个哨兵或锁定文件,并在用户尝试启动新的 Firefox 实例时检测到该文件,从而阻止他们这样做。无论 Firefox 是否仍然表现出这种行为,驱动程序仍然必须与某些旧版本的浏览器一起工作,并且必须考虑到这一点。Selenium 项目针对 WebDriver 问题的解决方案是,当用户想要使用特定配置文件时,将该配置文件的内容复制到新目录,然后启动指向该副本的 Firefox。

听起来 Mozilla 的实现基本上做了同样的事情。我猜这是出于同样的原因 - 支持多实例用例。

  • 如果 selenium 在完成后能够从 tmp 中删除这些配置文件,那就太好了。 (2认同)