【问题标题】:How do I set download directory for Google Chrome using Selenium (NodeJS)?如何使用 Selenium (NodeJS) 为 Google Chrome 设置下载目录?
【发布时间】:2020-07-04 22:49:22
【问题描述】:

我在 NodeJS 中进行了一项测试,该测试使用云上的 Google Chrome (BrowserStack) 从网站下载文件。我正在尝试将文件下载到我项目中的目录。我知道我必须通过 Chrome 选项进行设置,但此处没有发布的答案似乎有效。

有人可以分享一个如何使用 NodeJS 完成的示例吗?以下是我尝试过的一个示例,但它不起作用。

module.exports.createChromeDriver = async function () {
    if (parameters.runOnCloud === true) {

        await filesDirectory.createAppDirIfRequired(paths.tempDir, paths.downloadDirName);

        let capabilities = {
            'name' : parameters.report,
            'browserName' : 'Chrome',
            'browser_version' : '79.0',
            'os' : 'OS X',
            'os_version' : 'Mojave',
            'resolution' : '1920x1080',
            'browserstack.user' : credentials.browserstack.user,
            'browserstack.key' : credentials.browserstack.key,
            'browserstack.local' : 'true',
            'browserstack.localIdentifier': parameters.bsLocalIdentifier,
            'browserstack.networkLogs' : 'false',
        }

        if (parameters.tests === "wallet-web") {
            capabilities['browserstack.networkLogs'] = 'true';
        }

        let options = new chrome.Options();
        const prefs = {'download.default_directory' : paths.downloadsDir};
        options.addArguments('prefs', prefs);
        options.merge(capabilities);

        let driver = await new Builder().
            usingServer('http://hub-cloud.browserstack.com/wd/hub').
            withCapabilities(capabilities).
            build();

        return driver;
    }

【问题讨论】:

  • 请添加您声明downloadsDir的方式。你的操作系统是什么(Windows、Linux)?
  • 它只是项目中的一个文件夹路径。 Mac OS Mojave。
  • 您可能在 downloadsDir 变量声明中有错误。你是怎么设置的?你确定它不是未定义的吗?您在此脚本中同时拥有 paths.downloadDirName 和 paths.downloadsDir。
  • 如果项目中没有使用该名称的目录,那只会在项目中创建目录。

标签: node.js selenium automated-tests


【解决方案1】:

设置功能时出错。 capabilities 不包括download 选项,因为merge(options.merge(capabilities);) 运算符意味着,将capabilities 合并到options

你只需要改变一行:

withCapabilities(capabilities).

withCapabilities(options.toCapabilities()).

如果它不起作用,我认为您必须更改 option 变量,例如:

const options = new chrome.Options();
options.setUserPreferences({
  'download.default_directory': paths.downloadsDir,
  'download.prompt_for_download': false, // Maybe
});
options.merge(capabilities);

更新:

最后一种方式,你可以试试用

capabilities['goog:chromeOptions'] = options;

而不是

options.merge(capabilities);

【讨论】:

  • .toCapabilities() 不是函数。如果我只使用选项,它仍然不会下载到目录。
  • WebDriverError: 属性 '#/' 包含架构之外的其他属性 ["browserName", "goog:chromeOptions"],而 chromeOptions 中不允许使用任何属性
猜你喜欢
  • 1970-01-01
  • 2016-04-03
  • 2020-01-28
  • 2021-09-03
  • 2022-08-14
  • 1970-01-01
  • 2022-01-15
  • 2016-05-28
相关资源
最近更新 更多