Селен ждать загрузки? - PullRequest
       30

Селен ждать загрузки?

9 голосов
/ 12 октября 2010

Я пытаюсь проверить «счастливый путь» для фрагмента кода, который требует много времени для ответа, а затем начинает запись файла в поток вывода ответа, который запрашивает диалог загрузки в браузерах.

Проблема в том, что этот процесс не удался в прошлом, вызывая исключение после этого длительного объема работы. Есть ли путь в селене до wait-for-download или эквивалент?

Я мог бы добавить Thread.sleep, но это было бы неточно и излишне замедляло бы тестовый прогон.

Что мне здесь делать?

Ответы [ 6 ]

8 голосов
/ 20 августа 2015

У меня была такая же проблема.Я придумал что-то, чтобы решить проблему.Файл tempt создается Python с расширением .part.Таким образом, если у нас еще есть временная температура, python может подождать 10 секунд и снова проверить, загружен файл или нет.

5 голосов
/ 13 октября 2010

Итак, у вас есть две проблемы:

  1. Вам нужно заставить браузер загрузить файл
  2. Вам нужно измерить, когда загруженный файл будет завершен

Ни одна из проблем не может быть решена напрямую с помощью Selenium (пока - 2.0 может помочь), но обе проблемы решаемы. Первая проблема может быть решена с помощью инструментов автоматизации GUI, таких как AutoIT. Но их также можно решить, просто отправив автоматическое нажатие клавиши на уровне ОС, которое имитирует клавишу ввода (работает для Firefox, немного сложнее в некоторых версиях Chrome и Safari). Если вы используете Java, вы можете использовать Robot для этого. Другие языки имеют аналогичные наборы инструментов для этой цели.

Вторая проблема, вероятно, лучше всего решается с помощью какого-либо прокси-решения. Например, если ваш браузер настроен для прохождения через прокси-сервер, и у этого прокси-сервера есть API, вы можете запросить прокси-сервер с этим API, чтобы узнать, когда сетевая активность закончилась.

Это то, что мы делаем в http://browsermob.com,, который я основал, который использует Selenium для нагрузочного тестирования. Мы выпустили часть прокси-кода с открытым исходным кодом, доступную по адресу http://browsermob.com/tools.

Но две проблемы все еще сохраняются:

  1. Вам необходимо настроить браузер на использование прокси. В Selenium 2 это проще, но возможно и в Selenium 1. Ключ просто в том, что ваш браузер запускает браузер с нужным профилем / настройками.
  2. В настоящее время нет API для прокси-сервера BrowserMob, который бы сообщал вам, когда сетевой трафик остановился! Это большая дыра в концепции проекта, которую я хочу исправить, как только у меня будет время. Однако, если вы хотите помочь, присоединитесь к Группе Google, и я определенно могу указать вам верное направление.

Надеюсь, это поможет вам определить ваши различные варианты. Желаем удачи!

4 голосов
/ 10 ноября 2011

Это решение Chrome-only для тестирования загрузок с помощью javascript.

С помощью WebDriver (Selenium2) это можно сделать в Chrome chrome: // , который является HTML / CSS / Javascript:

driver.get( "chrome://downloads/" );
waitElement( By.CssSelector("#downloads-summary-text") );

// next javascript snippet cancels the last/current download
// if your test ends in file attachment downloading 
// you'll very likely need this if you more re-instantiated tests left
((JavascriptExecutor)driver).executeScript("downloads.downloads_[0].cancel_();");

В "chrome: //downloads/downloads.js" есть другие Download.prototype.functions

Это подходит вам, если выпросто нужно проверить некоторые информационные заметки, например.вызвано активностью запуска вложенного файла, а не самим файлом.

Естественно, вам нужно контролировать шаг 1. - упоминается Патриком выше - и этим вы контролируете шаг 2. ДЛЯ ТЕСТА, а не для функциональности фактического завершения / отмены загрузки файла.

См. Также: Javascript: отмена / остановка запросов изображения , что связано с остановкой браузера.

0 голосов
/ 12 февраля 2019
def file_downloaded?(file)
    while File.file?(file) == false
      p "File downloading in progress..."
      sleep 1
    end
end

* Синтаксис Ruby

0 голосов
/ 13 октября 2010

Если вы хотите проверить диалог загрузки, попробуйте использовать AutoIt. Я использую это для загрузки и скачивания файлов. Использовать AutoIt с Se RC проще.

0 голосов
/ 12 октября 2010

Подпадает под категорию «вещи, которые не могут быть автоматизированы».Selenium построен с использованием JavaScipt, и из-за ограничений песочницы JavaScript он не может получить доступ к загрузкам.

Selenium 2 может сделать это после того, как предупреждения / подсказки будут реализованы, но этого не произойдет в течение следующих нескольких минут.пока еще.

...