我正在尝试编写一个单击按钮下载文件的测试用例。现在我正在尝试读取该文件名并检查是否下载了正确的文件。 以下是我正在使用的代码段。
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/',
}
答案 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);
}
};