如果使用量角器下载了正确的文件,请检查文件名

时间:2017-12-21 20:36:15

标签: selenium protractor

我正在尝试编写一个单击按钮下载文件的测试用例。现在我正在尝试读取该文件名并检查是否下载了正确的文件。 以下是我正在使用的代码段。

var filename = 'ABC.csv'
it('Verify that file is downloaded',function(){
PageObject.DownloadButton.click();
browser.driver.wait(function() {
    return fs.existsSync(filename);
}, 30000).then(function() {
    expect(fs.filename).toContain('ABC.csv');
});

我正在做错事,因为我收到了异步超时错误。有人可以帮我找到问题吗?

我在protractor.conf文件中添加了以下代码。

prefs: {
    download: {
        prompt_for_download: false,
        default_directory: '/Downloads/',
    }

2 个答案:

答案 0 :(得分:3)

决定将评论中的想法转移到答案中。

最重要的是要理解你需要将两件事情结合在一起:

  • 您的文件将由浏览器下载的下载目录
  • 您正在观看/检查测试本身的目录

这必须是完全相同的目录 - 在您提供的情况下,它不是 - Chrome会自动将下载保存到/Downloads/目录中,但您正在检查当前目录 fs.existsSync(filename)当前目录将是您开始量角器测试的地方,而不是/Downloads/。这导致您的browser.driver.wait()等待超过默认的茉莉花超时间隔 - 因此,超时错误。

使用existsSync()修复您正在检查的目录路径,例如:

var downloadDirectory = '/Downloads/';

browser.driver.wait(function() {
    return fs.existsSync(downloadDirectory + filename);
}, 30000).then(function() {
    expect(filename).toContain('ABC.csv');
});

另请注意,我已在您的茉莉花期望表达式中将fs.filename替换为filename

答案 1 :(得分:1)

谢谢@alecxe。我通过在我的量角器conf.js中指定默认目录然后使用该默认目录来检查文件来实现此目的。

prefs: {
    download: {
    prompt_for_download: false,
    default_directory: path.join(downloads),
    }
}  

我还使用了一个函数来删除目录中具有指定名称的任何文件。

function rmDir (filename) {
    var filePath = 'downloads/' + filename;
    if (fs.exists(filePath)){
    fs.unlinkSync(filePath);
    }
};