2

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

Webdriver 有一个 FirefoxProfile 用于 Mozilla 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");
4

2 回答 2

1

使用 Chrome 可以做到,只是不像 Firefox 配置文件操作那样简单直接。

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

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

有了这个,我们可以为 Chrome 提供一个要加载的配置文件,就像使用 Firefox 一样。

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

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

在 Chrome 中转到此 URL。

chrome://version/

它会告诉你它当前正在加载什么配置文件(以及它正在使用什么命令开关)。将配置文件路径复制到资源管理器并转到它。

默认情况下,它应该使用Default配置文件目录。在资源管理器中升级,因此您坐在User Data文件夹中。

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

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

这可以通过两种方式完成。在 Chrome UI 中,转到设置,然后更改下载目录并确保未选中旁边的复选框,或者获得更多创意......

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

现在寻找一个名为Preferences(无扩展名)的文件。

用记事本编辑它(它是一个文本文档,带有 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 下登录的用户已设置此值,就无需进行更多设置。

于 2013-01-03T11:25:54.237 回答
0

请尝试下面的 chrome 代码。即使我正在为 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);
于 2014-07-18T06:36:31.240 回答