【问题标题】:Electron cannot access user data directory when using Selenium ChromeDriver使用 Selenium ChromeDriver 时 Electron 无法访问用户数据目录
【发布时间】:2021-01-18 03:54:57
【问题描述】:

我正在使用 Selenium 和 Robot Framework 来运行 Electron 应用程序。该应用程序被构建为从用户数据目录中读取配置文件。据我了解,这是应该存储此文件的位置。

electron主进程读取配置文件:

const localConfigFile = path.join(app.getPath('userData'), 'config.json');
const localConfig = fs.existsSync(localConfigFile) ? require(localConfigFile) : {};

构建的生产版本可以正常工作并按预期读取文件,但是当使用 SeleniumLibrary 从 Robot 启动它时,不会读取文件。这让我相信这是 Robot、Selenium 或 ChromeDriver 的问题。

机器人使用 SeleniumLibrary 创建 webdriver:

Create Webdriver    Remote    desired_capabilities=${starting_parameters}    command_executor=http://127.0.0.1:9515

起始参数很简单:

{ "chromeOptions": {"binary": <binary_location> }}

Chromedriver 是作为独立于安装它的/usr/bin/chromedriver 的进程启动的,并使用默认端口9515

我使用的版本是:

ChromeDriver 2.36.540471 (9c759b81a907e70363c6312294d30b6ccccc2752)
"electron": "^6.0.2"
"electron-builder": "^21.2.0"
robotframework==3.2.1
robotframework-seleniumlibrary==3.3.1
Ubuntu 18.04.4 LTS

【问题讨论】:

    标签: selenium electron selenium-chromedriver robotframework


    【解决方案1】:

    遇到了同样的问题。最后将 Chromedriver 的 user-data-dir 参数改为 Electron 的 userDataDir 解决了问题。

    options.add_argument('--user-data-dir=' + str(app_config_path()))

    【讨论】:

      【解决方案2】:

      我通过使用 Spectron 并记录 Electron 主控制台发现了问题。一般来说,我建议使用 Spectron 而不是 Robot 来测试 Electron 应用程序。

      问题在于用户数据目录与 Electron 默认目录不同。通过 Chromedriver 运行应用程序时,用户数据目录更改为 /tmp/somethingsomething 所以自然找不到 ~/.config/app-name 下的文件。

      我的解决方案是改用 Electron 的应用程序数据目录:

      app.getPath('appData')
      

      默认情况下,这是用户数据目录的上一级目录,但在通过 Chromedriver 运行时保持不变。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多