Обработка окна загрузки с помощью Firefox WebDriver

Я экспериментирую с Firefox WebDriver и хотел бы спросить, можно ли обрабатывать окно «Загрузка» (чтобы принять или отклонить входящий запрос на загрузку)?

Например, простой кусок кода:

import selenium.firefox.webdriver

dr = selenium.firefox.webdriver.WebDriver()
# Firefox is showed up.

# Let's say I'd want to download python.
dr.get('http://python.org/ftp/python/3.1.3/python-3.1.3.msi')
# Download window is showed up.
# How could I accept the download request?

# As I understand, the method below should return 
# two handles but I get only main window's handle. 
handles = dr.get_window_handles()

# Seems like WebDriver cannot "see" this popup.

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

Большое спасибо, - В.


person Vitaliy    schedule 09.12.2010    source источник


Ответы (3)


Одним из решений этой проблемы является изменение профиля Firefox WebDriver для автоматической загрузки некоторых типов MIME в заданный каталог.

Я не уверен, как (и если) это отображается в Python, но это упоминается в Страница привязок Ruby в Selenium wiki (в разделе «Настройка параметров Firefox»).

person jarib    schedule 10.12.2010
comment
Справедливо ли предположить, что возможность настройки параметров FF полностью выходит за рамки возможностей веб-драйвера, что-то, полностью написанное на рубине? Я хочу сделать что-то подобное для привязок PHP, и мне было любопытно, как это будет сделано. - person tipu; 02.03.2012

Я не думаю, что это то, для чего был создан WebDriver, но я попробую. В Firefox WebDriver нет ничего встроенного для обработки этого конкретного случая, но есть несколько подходов, которые вы можете использовать.

Вы можете открыть FF с профилем, который использует ваш сценарий WebDriver, и отредактировать настройки, чтобы всегда сохранять файл, а не спрашивать («Параметры»> «Приложения»> «Пакет установщика Windows» — установите «Сохранить файл»). Теперь, однако, невозможно сказать, что файл загружается из браузера, если вы не будете перенаправлены на страницу 404. Если нет, вы можете проверить, существует ли файл в каталоге загрузок для того же профиля (Параметры > Главное > Загрузки). Если он все еще находится в процессе загрузки, имя файла будет WhateverFileName.ext.part.

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

Удачи

person dflems    schedule 09.12.2010

я столкнулся с этим, когда пытался загрузить файл с помощью капибары и был остановлен приглашением на загрузку

SeleniumHQ: Selenium WebDriver

profile = Selenium::WebDriver::Firefox::Profile.new
profile['browser.download.dir'] = "/Downloads"
profile['browser.download.folderList'] = 2
profile['browser.helperApps.neverAsk.saveToDisk'] = "audio/wav"
driver = Selenium::WebDriver.for :firefox, :profile => profile
driver.navigate.to('http://www.address.com/file.wav')

это просто загружает файл в указанный каталог, без подсказки :)

другой вариант, с которым я столкнулся, был

Определение типов файлов MIME для автосохранения с помощью Firefox и Watir-WebDriver

я пробовал ватир раньше, и это оказалось очень полезным

person ajt    schedule 06.02.2013