我正在尝试编写一个测试用例,单击按钮即可下载文件。现在我尝试读取该文件名并检查是否下载了正确的文件。 下面是我正在使用的代码片段。
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/',
}
最佳答案
决定将评论中的想法转化为答案。
要理解的最重要的事情是您需要将两件事结合在一起:
- 浏览器将下载文件的下载目录
- 您在测试中正在观看/检查的目录
这必须是同一个目录 - 在您提出的情况下,它不是 - Chrome 会自动将下载保存到 /Downloads/
目录中,但您正在检查 当前目录与fs.existsSync(filename)
。 当前目录将是您开始 Protractor 测试的位置,而不是/Downloads/
。这会导致您的 browser.driver.wait()
等待的时间超过默认的 jasmine 超时间隔 - 因此,出现超时错误。
修复您正在使用 existsSync()
检查的目录路径,例如:
var downloadDirectory = '/Downloads/';
browser.driver.wait(function() {
return fs.existsSync(downloadDirectory + filename);
}, 30000).then(function() {
expect(filename).toContain('ABC.csv');
});
另外,请注意,我已将您的 jasmine 期望表达式中的 fs.filename
替换为 filename
。
关于selenium - 使用 Protractor 检查文件名是否下载了正确的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47932376/