【问题标题】:protractor: test download file without knowing filename量角器:在不知道文件名的情况下测试下载文件
【发布时间】:2017-04-26 06:02:51
【问题描述】:

我关注了this answer,它看起来几乎是我需要的东西。

问题在于他已经知道文件名并且我正在做 e2e 测试以下载文件,但文件名取决于当前时间(即使是毫秒)所以我真的不知道名称(或者它会很难得到它)。

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

  1. 重新创建文件名(使用返回此文件名称的相同函数)并开始检查具有该名称的文件是否存在,如果它不存在,则移动到下一毫秒,直到我找到正确的名称。
  2. 检查下载文件夹是否存在“任何”文件,如果我在那里找到一个,那么它应该是我正在下载的文件(对于这种情况,我不知道如何在量角器中检查整个文件夹)。李>

希望你们可以为这些替代方案提供帮助(我希望对第 2 点有所帮助),或者给我一个更好的替代方案。谢谢

【问题讨论】:

  • 我脑海中出现的第一个想法:我可能会清理测试设置中的下载目录并等待任何文件(或与特定 glob 模式匹配的文件) - 还没有这样做虽然,但也许你可以使用glob 包(example)构建递归的东西——搜索文件直到找到,或者“超时”发生——你可以让茉莉花控制超时,或者自己手动测量它。谢谢。
  • @alecxe 我最终听从了你的建议,只是不知道用什么来等待,setTimeoutbrowser.wait
  • @alecxe 如果浏览器本身知道它正在下载的浏览器会很好
  • @alecxe 我正在考虑回答我自己的问题

标签: selenium-webdriver jasmine protractor


【解决方案1】:

只是为@elRuLL 的答案添加更多背景信息。

主要思想基于两件事:

  • browser.wait() 完美地解决了这个问题——它会连续执行一个函数,直到它评估为真或达到超时。而且,超时机制已经内置。
  • glob module 提供了一种查找与特定模式匹配的文件名的方法(在最坏的情况下,您可以等待 *.* - 基本上,任何文件都会出现)

【讨论】:

    【解决方案2】:

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

    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
    });
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    • 2022-08-03
    • 2017-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多