【问题标题】:Protractor - Unable to Find a Downloaded File - Download Test on Chrome量角器 - 无法找到下载的文件 - 在 Chrome 上下载测试
【发布时间】:2017-05-22 09:53:13
【问题描述】:

我想在 Google Chrome 上运行文件下载的 e2e 测试。我提到了几个帖子,包括Protractor - Jasmine - Download file to a relative pathProtractor e2e test case for downloading pdf fileSetting chromedriver preferences on protractor tests,但它们并没有让我满意。

这是我的量角器配置的简要介绍。

    ...
    'os': 'Windows',
    'os_version': '8.1',
    'browserName': 'Chrome',
    'version': '55',
    'chromeOptions': {
        args: ['--no-sandbox', '--test-type=browser'],
        prefs: {
            download: {
                'prompt_for_download': false,
                'directory_upgrade': true,
                'default_directory': '/tmp'
            }
        }
    }
    ...

这是我的测试规范。

    it('file download test', () => {
        let filePath = path.resolve('/tmp/' + download-filename);
        // unlink(filePath);

        // click on a link by invoking anchor_element.click()
        // at the moment, file download will be done on chrome
        // with no prompt experienced

        // wait until file has been downloaded,
        //  (in fact, download can be finished within a sec)
        browser.wait(
            () => fs.existsSync(filePath),
            10000
        ).then(() => {
            // and then expectations here
        });
    });

所以就我而言,文件已成功下载,但chromeOptions 似乎不起作用,因为文件未下载到'default_directory' 中给出的目录中。

我做错了什么?或者在我的情况下,默认情况下使用 chrome 下载的文件在哪里?

我正在将 BrowserStack 用于 selenium 服务器并运行本地测试。 我正在使用getMultiCapabilities 选项配置具有多种功能的量角器。

希望有人能给我一些关键提示。

【问题讨论】:

  • 您必须在 default_directory 中提供绝对路径。

标签: download protractor


【解决方案1】:

请在您的 conf.js 中添加以下代码

var path = require('path');
var downloadsPath = path.resolve(__dirname, './downloads');

请参考首选项中的“downloadsPath”。

prefs: {
          download: {
            'prompt_for_download': false,
            'directory_upgrade': true,
            'default_directory': downloadsPath
          }
        }

我希望这会有所帮助。

谢谢

【讨论】:

    【解决方案2】:

    尝试用'default_directory': '//tmp'替换'default_directory': '/tmp'

    【讨论】:

    • 谢谢你的回答,鲍勃。但是,它仍然不起作用。将'//tmp' 赋予'default_directory' 选项,会发生什么?我的意思是下载完成后文件将保存在哪里?所以我可以通过fs.existsSync(filePath)查看。
    • 如果你在 Windows 上运行,'default_directory': 'C:\\Downloads',这应该可以工作
    • 正如我在问题中提到的,执行测试规范的目标平台是 Windows 8.1。但我的工作环境是 Ubuntu(我在 Ubuntu 上运行测试命令,如 npm run test-e2e)。在这种情况下,当我尝试检查文件是否存在时,fs.existsSync() 在 Ubuntu 上搜索文件,而不是在 Windows 上。这是实际的问题。我真的很感谢你的评论。希望您能给我提供更多的背景原理提示。
    【解决方案3】:

    由于您的测试在不同的服务器上运行,因此不会在本地计算机上进行下载。如果 selenium 实例在同一台机器上,那么你的方法就可以了。通过删除配置文件中的 selenium 地址并添加“directconnect:true”重试 这样您就可以在所需的路径中下载文件。

    但是对于我提到的相同用例:Remote File Downloads How to download a file using the remote selenium webdriver?

    【讨论】:

      【解决方案4】:

      您可以在您的项目中创建一个下载文件夹并为 Chrome 设置。 单击下载按钮后,您需要浏览器等待功能来下载文件。我不知道如何使用 FireFox 进行这项工作,但 Chrome 通过了。我认为 FireFox 的首选项与 Chrome 的首选项不同。

      打开 Firefox 的首选项:打开 FF 并粘贴 about:config

      我认为你应该使用这个:

      {
        browserName: 'chrome',
        acceptInsecureCerts: true,
        chromeOptions: {
          args: [
            // "--headless",
          ],
          prefs: {
            'download': {
              'prompt_for_download': false,
              'directory_upgrade': true,
              'default_directory': process.cwd() + "/resources/test/download",
            },
      
          },
        },
      }
      

      您可以将default_directoryprocess.cwd()__dirname 结合使用(__dirname = _ _ d i r n a m e)

      而且,如果你想在 firefox 的 about:config 中找到你想要的,你可以使用https://www.freeformatter.com/mime-types-list.html 获取 Firefox 首选项的值。

      【讨论】:

        【解决方案5】:

        这解决了我的问题:

        npm i webdriver-manager@latest
        

        之后,下载的文件出现在default_directory中

        【讨论】:

          猜你喜欢
          • 2018-07-27
          • 1970-01-01
          • 1970-01-01
          • 2020-05-25
          • 2014-03-23
          • 2017-04-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多