2010-12-09 64 views
2

我正在尝试使用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. 

我这个试验一点点,但还没有找到解决办法。我真的很感激任何提示。

非常感谢, - V

回答

5

一个解决这个正在改变的webdriver的Firefox配置文件自动下载一些MIME类型给定的目录。

我不确定这是如何(或如果)在Python中公开,但它在Selenium wiki上的Ruby bindings page上提到(在“调整Firefox偏好设置”下)。

+0

是公平的假设,来调整FF喜好的能力完全不在的webdriver的ablities的,完全的东西在红宝石写的?我想为PHP绑定做类似的事情,并对如何完成它感到好奇。 – tipu 2012-03-02 19:19:50

3

我不认为这是哪门子的那webdriver的是为建的事情,但我会在它需要一个裂缝。 Firefox WebDriver没有内置任何内容来处理这种特定情况,但您可以采取一些方法。

您可以使用WebDriver脚本使用的配置文件打开FF,并编辑首选项以始终保存文件而不是询问(选项>应用程序> 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它被证明是非常有用的