Selenium 2 chrome驱动程序首选项java相当于RubyBindings



在过去的两天里,我一直在寻找一种使用java为chrome驱动程序设置驱动程序偏好的方法,但没有成功。

然而,我在ruby VIA RubyBindings中找到了一个解决方案,我想知道是否有一个java等效行可以用于此。

ruby代码如下:

profile = Selenium::WebDriver::Chrome::Profile.new
profile['download.prompt_for_download'] = false
profile['download.default_directory'] = "/path/to/dir"
driver = Selenium::WebDriver.for :chrome, :profile => profile

在搜索时,我发现chrome没有像FirefoxProfile类那样可以使用的探查器,所以我开始使用DesireCapabilities类。在对这个问题进行进一步调查后,我发现我可以设置VIA能力的"开关"one_answers"首选项"。setCapability并最终得到以下结果:

Map<String, String> prefs = new Hashtable<String, String>();
prefs.put("download.prompt_for_download", "false");
prefs.put("download.default_directory", "/path/to/dir");
prefs.put("download.extensions_to_open", "pdf");
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
capabilities.setCapability("chrome.prefs", prefs);
dr = new ChromeDriver(capabilities);

然而,我无法做到这一点,默认的下载目录在启动后从未更改为指定的目录。我不确定我如何设置这种能力是否有问题,或者问题是否在其他地方。

最终,我使用了这里提出的解决方案:
http://dkage.wordpress.com/2012/03/10/mid-air-trick-make-selenium-download-files/

但我想知道是否有可能做到这一点更干净,但只是直接设置首选项,而不是使用UI

感谢您的帮助,谢谢!

更新:
令人惊讶的是,在将Selenium 2更新到2.24.1版本(和windows chrome 22)后,上面的Maps代码可以正常工作,现在唯一的问题是他们不赞成使用构造函数ChromeDriver(DesiredCapabilities功能),而是建议我使用ChromeOptions类,我无法在上面的场景中使用它。

以下是解释ChromeOptions和DesireCapabilities的使用的wiki页面:http://code.google.com/p/chromedriver/wiki/CapabilitiesAndSwitches

Ruby绑定实际上将其扩展为:
{
   "download": {
      "prompt_for_download": false,
      "default_directory": "/path/to/dir"
    }
}

试着像那样构建Java prefs对象,看看它是否有效。字符串vs布尔值false也可能是一个问题。

试试这个(请原谅我的java很生疏,但希望你能明白)

Dictionary download = new Dictionary();
download["default_directory"] = "/path/to/dir";
Dictionary prefs = new Dictionary();
prefs["browser"] = download;
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
capabilities.setCapability("chrome.prefs", prefs);
WebDriver driver = new ChromeDriver(capabilities);

更新:我刚刚浏览了代码,上面的建议似乎不起作用。ruby chrome概要文件类创建了一个zip文件,其中包含chrome配置文件结构,以支持chrome首选项。我在java中找不到这样的设施代码。java中有一个Firefox配置文件,它为Firefox做了类似的事情,但显然这对chrome不起作用。简而言之,这个特性在java中还不受支持。

较新版本(我测试了Chrome 44.0.2403.125、Selenium 2.47.1和ChromeDriver 2.17.340128)使用以下功能:

ChromeOptions options = new ChromeOptions();
Map<String, Object> prefs = new HashMap<String, Object>();
prefs.put("download.default_directory", "/path/to/directory");
options.setExperimentalOption("prefs", prefs);
ChromeDriver chromeDriver = new ChromeDriver(options);

最新更新