关于Selenium Webdriver:protractor:在不知道文件名的情况下测试下载文件

protractor: test download file without knowing filename

我遵循了这个答案,看起来几乎是我需要的东西。

问题在于他已经知道文件名,并且我正在进行e2e测试以下载文件,但是文件名取决于当前时间(即使以毫秒为单位),因此我实际上并不知道名称(否则它会很难获得它。)

我想我在这里遗漏了一些非常简单的东西,但是我在想两种方法:

  • 重新创建文件名(使用相同的函数返回该文件的名称),并开始检查该名称的文件是否存在(如果不存在),然后移至下一个毫秒,直到找到正确的名称为止。
  • 检查下载文件夹中是否存在"任何"文件,如果在其中找到一个文件,则应该是我正在下载的文件(在这种情况下,我不知道如何在protractor中检查整个文件夹)。
  • 希望你们可以为这些替代方案提供帮助(我希望对第二点有所帮助),或者给我一个更好的替代方案。谢谢


    我最终遵循@alecxe的建议,这是我的答案:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    var glob = require("glob");

    browser.driver.wait(function () {
        var filesArray = glob.sync(filePattern);
        if (typeof filesArray !== 'undefined' && filesArray.length > 0) {
            // this check is necessary because `glob.sync` can return
            // an empty list, which will be considered as a valid output
            // making the wait to end.
            return filesArray;
        }
    }, timeout).then(function (filesArray) {
        var filename = filesArray[0];
        // now we have the filename and can do whatever we want
    });


    只需在@elRuLL的答案中添加更多背景信息即可。

    主要思想基于两点:

    • browser.wait()非常适合该问题-它会连续执行一个函数,直到结果为true或达到超时为止。并且,超时机制已经内置。
    • glob模块提供了一种查找与特定模式匹配的文件名的方法(在最坏的情况下,您可以等待*.*-基本上,任何文件都会出现)