Selenium 2 chromedriver首选项java相当于Ruby Bindings

时间:2012-03-27 16:52:34

标签: java google-chrome webdriver selenium-webdriver

我一直在寻找一种方法,在过去的两天里使用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类。经过对此问题的进一步调查后,我发现我可以设置“开关”和“prefs”VIA功能。设置可用性并最终得到以下结果:

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和DesiredCapabilities的使用: http://code.google.com/p/chromedriver/wiki/CapabilitiesAndSwitches

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

试试这个(原谅我的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中还不支持此功能。

答案 2 :(得分:0)

较新的版本(我测试的是Chrome 44.0.2403.125,Selenium 2.47.1和ChromeDriver 2.17.340128)可以使用以下内容:

Private Sub Savebtn_Click(sender As Object, e As EventArgs) Handles Savebtn.Click

      Try

         If txtItemID.Text = "" Or txtItemName.Text = "" Or txtQuantity.Text = "" Or cBoxCategory.Text = "" Or cBoxClass.Text = "" Or cBoxUnit.Text = "" Or dtpAdd.Value =""Then

          MsgBox("All fields required!")

        Else            

            ConStr.Open()

            Dim Add_Query As String

            Add_Query = "INSERT INTO Stocks (ItemID,Item,Serial,Quantity,Category,Class,Unit,Beg_Date) VALUES ('" & txtItemID.Text & "','" & txtItemName.Text & "','" & txtSerial.Text & "','" & txtQuantity.Text & "','" & cBoxCategory.Text & "','" & cBoxClass.Text & "','" & cBoxUnit.Text & "','" & dtpAdd.Value & "')"

            Cmd = New MySqlCommand(Add_Query, ConStr)
            Rdr = Cmd.ExecuteReader
            MsgBox("Successfully Added!")
            Me.Hide()
            ConStr.Close()
        End If

    Catch ex As MySqlException
        MsgBox("Connection Failed!")

    Finally
        ConStr.Dispose()

    End Try

End Sub