Angular 6 - 使用量角器测试文件下载时,如何为文件的目标设置相对路径

Angular 6 - When testing file download with Protractor, how do I set a relative path for the file's destination

提问人:kriskanya 提问时间:8/10/2018 更新时间:8/10/2018 访问量:3601

问:

我需要下载CSV并在量角器测试中检查其内容。测试作为部署过程的一部分运行,因此此下载的路径必须是相对的。

查看其他解决方案,我在 /e2e 创建了一个名为 download 的文件夹,并将其添加到我的:protractor.conf.js

capabilities: {
      browserName: 'chrome',
      chromeOptions: {
          args: ['--disable-gpu']
      },
      prefs: {
        'download': {
          'prompt_for_download': false,
          'default_directory': '/e2e/download'
        }
      }
    },

这是原始测试,单击按钮下载文件,然后检查本地下载文件夹中的内容(一旦下载本身实际工作,就需要更改)。

  it('should export the csv', () => {
    const filename = '../../../Downloads/new_Name_List_members.csv';
    const exportButton = testUI.findElementBy({findBy: 'buttonText', value: 'Export to CSV'});
    exportButton.click().then(() => {
      browser.driver.wait(function() {
        // Wait until the file has been downloaded.
        return fs.existsSync(filename);
      }, 5000).then(function() {
        expect(fs.readFileSync(filename, { encoding: 'utf8' })).toContain('username,email,name');
      });
    });
  });

即使我已经指定了路径,单击按钮时,文件仍会下载到我的本地下载文件夹。即使我将其设置为完整路径------它仍然会下载到我的本地下载。capabilities.prefs'default_directory': '/Users/kkanya/Documents/Code/project/e2e/download'

我已经查看了量角器config.ts文件,但找不到任何可能允许我更改默认下载目录的内容。事实上,我没有看到 ,这让我相信这可能不是使用最新的量角器执行此操作的正确方法。prefs

非常感谢任何帮助。

量角器

评论


答:

3赞 kriskanya 8/10/2018 #1

这就是我想出的。它似乎正在工作。它首先删除其中的目录,然后在下载文件时重新创建它。downloade2e

请注意,这是一个值(我在原来的问题中不正确。prefschromeOptions

protractor.conf.js:

exports.config = {
    capabilities: {
      browserName: 'chrome',
      chromeOptions: {
        args: ['--disable-gpu'],
        prefs: {
          download: {
            'prompt_for_download': false,
            'default_directory': './e2e/download'
          }
        }
      }
    },

    ...

    onPrepare() {
      // delete ./e2e/download before tests are run
        rmDir('./e2e/download');
    }

// https://sqa.stackexchange.com/questions/24667/how-to-clear-a-directory-before-running-protractor-tests/27653
var fs = require('fs');  

function rmDir (dirPath) {
  try { var files = fs.readdirSync(dirPath); }
  catch(e) { return; }
  if (files.length > 0)
    for (var i = 0; i < files.length; i++) {
      var filePath = dirPath + '/' + files[i];
      if (fs.statSync(filePath).isFile())
        fs.unlinkSync(filePath);
      else
        rmDir(filePath);
    }
  fs.rmdirSync(dirPath);
};

文件:.spec.ts

  it('should export the csv', () => {
    const filename = './e2e/download/new_Name_List_members.csv';

    const exportButton = testUI.findElementBy({findBy: 'buttonText', value: 'Export to CSV'});
    exportButton.click().then(() => {
      browser.driver.wait(function() {
        // Wait until the file has been downloaded.
        return fs.existsSync(filename);
      }, 5000).then(function() {
        expect(fs.readFileSync(filename, { encoding: 'utf8' })).toContain('username,email,name');
      });
    });
  });

希望这对某人有所帮助。