2010-12-09 1 views
2

Я экспериментирую с WebDriver от Firefox, и я хотел бы спросить, можно ли обрабатывать окно «Загрузить» (чтобы принять или отклонить входящий запрос на загрузку)?Обработка окна «Загрузка» от 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. 

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

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

ответ

5

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

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

+0

это справедливо предположить, что возможность настройки FF предпочтения полностью вне ablities WebDriver, то на что написанное полностью в рубин? я хочу сделать что-то подобное для PHP привязок и было любопытно, как это будет достигнуто. – tipu 2012-03-02 19:19:50

3

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

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

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

удачи

3

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

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') 

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

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

Determining file MIME types to autosave using Firefox & Watir-WebDriver

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