自定义文件下载的浏览器首选项

时间:2013-01-02 16:32:13

标签: c# selenium webdriver preferences

使用Selenium WebDriver作为Web自动化框架时,我有一个问题 - 如何配置Google Chrome和Internet Explorer以将下载的文件保存到特定(非默认)文件夹,并且不显示其他“保存文件”窗口。

Webdriver有一个用于Mozilla Firefox浏览器的FirefoxProfile,但其他浏览器呢?

Firefox示例:

        FirefoxProfile profile = new FirefoxProfile();

        profile.SetPreference("browser.helperApps.alwaysAsk.force", false);

        profile.SetPreference("browser.download.folderList", 2);

        profile.SetPreference("browser.download.dir", "\\Somedir\");

        profile.SetPreference("services.sync.prefs.sync.browser.download.manager.showWhenStarting", false);

        profile.SetPreference("browser.download.useDownloadDir", true);

        profile.SetPreference("browser.helperApps.neverAsk.saveToDisk", "application/zip, application/x-gzip");

2 个答案:

答案 0 :(得分:1)

使用Chrome,它可以完成,它不像Firefox配置文件操作那么简单直接。

由于WebDriver绑定提供了添加“自定义”功能和命令行参数的功能,因此您可以为其提供Chrome知道的任何命令行开关:

http://peter.sh/experiments/chromium-command-line-switches/

有了这个,我们可以为Chrome添加个人资料,就像使用Firefox一样。

但是,WebDriver绑定不会公开选项以及Firefox配置文件。所以必须手动完成。

首先,找出您的个人资料所在的位置:

在Chrome中转到此网址。

chrome://version/

它将告诉您当前正在加载的配置文件(以及它正在使用的命令切换)。将配置文件路径复制到资源管理器中并转到它。

默认情况下,应使用Default个人资料目录。在资源管理器中上升,因此您可以坐在User Data文件夹中。

下一步,为Selenium创建一个新的配置文件以供使用。打开Chrome,转到设置>用户>添加新用户。给它起一个名字。

Chrome创建后,将为该用户打开一个新的Chrome窗口。下一步是强制Chrome(仅限此用户)在特定位置保存下载。

这可以通过两种方式完成。在Chrome用户界面中,转到“设置”,然后更改下载目录并确保未选中旁边的复选框,或者获取更多广告素材...

所有Chrome偏好设置都存储在一个文件中,存储在users目录中。您应该已经打开了一个资源管理器窗口,该窗口位于Chrome用户文件夹中的User Data文件夹中。你应该希望看到它创建了一个新的配置文件(可能称为Profile 1)。进入它。

现在查找名为偏好设置的文件(无扩展名)。

使用记事本编辑它(它是一个带有JSON的文本文档)。

查找下载部分,它将如下所示:

"download": {
    "directory_upgrade": true,
    "extensions_to_open": ""
},

添加此密钥,将要保存文件的路径放入:

"default_directory": "PATH",

确保使用另一个反斜杠转义路径中的任何斜杠,就像使用Visual Studio调试器时转义它一样。

例如,C:\Bob\Jim\Downloads应输入为C:\\Bob\\Jim\\Downloads

保存此文件。

现在您有一个配置文件,下载到某个地方。如何让Chrome使用此个人资料?你告诉它在发布时打开哪个配置文件。命令行将是:

--profile-directory="Profile 1"

(将Profile 1替换为User Data文件夹中调用的任何内容(如果未调用它)。

好的,我们可以告诉Chrome加载特定的个人资料,但我们如何告诉Selenium呢?简单!将其添加为“附加命令行开关”。

var chromeOptions = new ChromeOptions();
chromeOptions.AddArgument(@"--profile-directory=""Profile 1""");

Selenium会确保将命令行开关传递给Chrome。

(注意:如果有人知道更简单的解决方案,请告诉我!)。

至于IE,我已经在IE8和IE9上测试了它,它运行正常。 IE可以考虑默认下载位置所在的注册表项。我不能评论IE7或以下版本。

使用 regedit 导航至(每个Windows用户设置):

HKEY_CURRENT_USER \ Software \ Microsoft \ Internet Explorer

添加名为Download Directory的字符串值。它的将是您希望下载的确切位置。无需逃离BTW的道路。

只需确保您在Windows下登录的用户已设置此值,就不再需要进行设置。

答案 1 :(得分:0)

请尝试使用以下代码进行操作。即使我正在为IE寻找类似的选项。

System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");
String downloadFilepath = "/path/to/download";
HashMap<String, Object> chromePrefs = new HashMap<String, Object>();
chromePrefs.put("profile.default_content_settings.popups", 0);
chromePrefs.put("download.default_directory", downloadFilepath);
ChromeOptions options = new ChromeOptions();
HashMap<String, Object> chromeOptionsMap = new HashMap<String, Object>();
options.setExperimentalOptions("prefs", chromePrefs);
options.addArguments("--test-type");
DesiredCapabilities cap = DesiredCapabilities.chrome();
cap.setCapability(ChromeOptions.CAPABILITY, chromeOptionsMap);
cap.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
cap.setCapability(ChromeOptions.CAPABILITY, options);
WebDriver driver = new ChromeDriver(cap);