Предполагая, что вы используете драйвер Selenium, вы можете «щелкнуть» по ссылке и $this->getSession()->wait(30)
, пока загрузка не будет завершена, а затем проверить папку «Загрузки» на наличие файла.
Это было бы самое простое решение. В качестве альтернативы вы можете использовать прокси-сервер, например BrowserMob, чтобы отслеживать все запросы и затем проверять код ответа. Но это был бы действительно болезненный путь только для этого.
Самый простой способ проверить, загружен ли файл, — это определить еще один шаг с помощью базового утверждения.
/**
* @Then /^the file ".+" should be downloaded$/
*/
public function assertFileDownloaded($filename)
{
if (!file_exists('/download/dir/' . $filename)) {
throw new Exception();
}
}
Это может быть проблематично в ситуациях, когда вы загружаете файл с тем же именем, а браузер сохраняет его под другим именем. В качестве решения вы можете добавить хук @BeforeScenario
, чтобы очистить список известных файлов.
Другой проблемой может быть сам каталог загрузки — он может отличаться для других пользователей/машин. Чтобы исправить то, что вы могли передать каталог загрузки в вашем behat.yml
в качестве аргумента конструктору контекста, прочитайте документы для этого.
Но лучшим подходом было бы передать конфигурацию Selenium, указав каталог загрузки, чтобы убедиться, что он всегда понятен, и вы точно знаете, где искать. Я не уверен, как это сделать, но из быстрое гугление кажется возможным.
person
Ian Bytchek
schedule
24.07.2014