selenium - 使用 Protractor 检查文件名是否下载了正确的文件

标签 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/',
    }

最佳答案

决定将评论中的想法转化为答案。

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

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

这必须是同一个目录 - 在您提出的情况下,它不是 - 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/

相关文章:

Python 3 Selenium 键错误 : 'value' Issue won't initialize Geckodriver for Firefox

python - 使用Python的 Selenium : Permission Denied to Launch Webdriver

angularjs - 使用 Protractor + Appium + SauceLabs

angularjs - Protractor - 如何验证切换按钮是否已选择/启用或未选择?

node.js - Protractor - 出现错误“找不到模块../lib/cli.js

java - 无法找到窗口 - Selenium Webdriver 错误

Selenium 使用按钮类型和按钮标签而不是文件上传文件

python - 如何使用子类的默认值调用父类init?

javascript - 获取 promise 数组的大小( Protractor )

javascript - Protractor 检查位置路径