2016-12-11 2 views
8

Я следил за this answer, и это выглядит почти тем, что мне нужно.транспортир: test скачать файл без знания filename

Проблема в том, что он уже знает имя файла, и я делаю тест e2e для загрузки файла, но имя файла зависит от текущего времени (даже с миллисекундами), поэтому я не знаю его (или было бы очень трудно получить его).

Я думаю, что я пропускаю что-то очень простое, но я думал, двух способов:

  1. воссоздавать имена файлов (с той же функцией, которая возвращает имя этого файла) и начать проверки существования в файл с этим именем, если он не существует, затем перейдите к следующей миллисекунде, пока я не надену правильное имя.
  2. Проверьте папку загрузки для существования «любого» файла, если я найду его там, это должен быть файл, который я загружаю (для этого случая я не знаю, как проверить всю папку в транспортимере).

Надеюсь, вы, ребята, можете помочь с этими альтернативами (я хотел бы помочь с пунктом 2) или, может быть, дать мне лучший вариант. Благодаря

+3

Просто первая мысль пришла мне в голову: я 'd, возможно, очистит каталог загрузки в тестовой настройке и дождитесь, пока какой-либо файл (или файл, соответствующий определенному шаблону glob) - не сделал этого, хотя, возможно, вы можете построить что-то рекурсивное с помощью пакета 'glob' ([пример ] (http://stackoverflow.com/a/21320251/771848)) - поиск файла до тех пор, пока не будет найден, или произойдет «тайм-аут» - вы можете позволить жасмину контролировать тайм-аут или самостоятельно измерять его. – alecxe

+0

@alecxe Я закончил следовать вашему предложению, я просто не знал, что использовать для ожидания, 'setTimeout' или' browser.wait' – eLRuLL

+0

@alecxe было бы хорошо, если бы браузер сам знал о браузере, который он загружает – eLRuLL

ответ

5

Я в конечном итоге следующее предложение @ 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 
}); 
+0

Ницца, спасибо за то, что поделились! – alecxe

+0

спасибо за идею;) – eLRuLL

+0

Примечание: я перекрестно переписал его на сайт SQA с дополнительным объяснением: http://sqa.stackexchange.com/a/24439/5574. – alecxe

3

Просто, чтобы добавить немного больше справочной информации для ответа на @ elRuLL в.

Основная идея основана на 2-х вещей:

  • browser.wait() подходит проблему идеально - она ​​выполнять функцию непрерывно до тех пор, пока не имеет значение истина или тайм-аут достигается. И механизм тайм-аута уже встроен.
  • glob module предоставляет способ для поиска имен файлов, соответствующих определенному шаблону (в худшем случае, вы можете ждать *.* - в основном, любой файл появится)