使用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");
答案 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);