【问题标题】:Selenium 2 chrome driver preferences java equivalent to RubyBindingsSelenium 2 chrome 驱动程序首选项 java 等效于 RubyBindings
【发布时间】:2012-04-11 06:04:12
【问题描述】:

过去两天我一直在寻找一种方法来设置使用 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 的“开关”和“首选项”功能。setCapabilitiy 并最终得到以下结果:

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)之后,上面带有地图的代码按预期工作,现在唯一的问题是他们不赞成使用构造函数 ChromeDriver(DesiredCapabilities 功能),而是建议我使用 ChromeOptions 类,我无法在上述情况下工作。

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

【问题讨论】:

    标签: java google-chrome webdriver selenium-webdriver


    【解决方案1】:

    Ruby 绑定实际上将其扩展为:

    {
       "download": {
          "prompt_for_download": false,
          "default_directory": "/path/to/dir"
        }
    }
    

    尝试像这样构建您的 Java 首选项对象,看看它是否有效。字符串与布尔值 false 也可能是一个问题。

    【讨论】:

    • 感谢您的建议,我没有注意到绑定会像那样展开。不幸的是,尽管这样做仍然没有帮助(我已经排除了“prompt_for_download”,因为 chrome 默认情况下已经这样做了,以避免出现问题的可能性)
    【解决方案2】:

    试试这个(原谅我的 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 profile 类创建带有 chrome profile 文件结构的 zip 文件,以支持 chrome 首选项。我在java中找不到这样的设施代码。 java中有一个Firefox配置文件可以为firefox做类似的事情,但显然这不适用于chrome。所以简而言之,这个特性在java中还不支持。

    【讨论】:

    • 据我所见,这个想法与 jarib 建议的想法相同,只是我们使用的是“浏览器”而不是“下载”。我也尝试过更改此设置,但不幸的是,这仍然无法正常工作(请注意,字典和哈希表都实现了 Map,因此我使用字典或哈希表无关紧要)
    • 我想知道如果你为首选项创建一个 json 字符串,例如 capabilities.setCapability("chrome.prefs", "{\"download\": {\"default_directory\": \" /path/to/dir\"}}");
    • 我只是浏览了代码,看来我上面的建议可能也不起作用。 ruby chrome profile 类创建一个物理 zip 文件,其中包含 chrome profile 文件结构,以支持 chrome 首选项。我在java中找不到这样的设施代码。 java中有一个Firefox配置文件可以为firefox做类似的事情,但显然这不适用于chrome。
    • 是的,我实际上注意到了 java 中的 firefox 配置文件,这就是为什么我认为 chrome 中会有类似的东西。不幸的是,我能找到的最接近的东西是红宝石......
    【解决方案3】:

    较新的版本(我测试了 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);
    

    【讨论】:

      猜你喜欢
      • 2012-12-02
      • 1970-01-01
      • 2011-09-16
      • 2017-03-10
      • 2022-01-28
      • 2016-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多