Html 如何在watir中单击按钮元素?

Html 如何在watir中单击按钮元素?,html,ruby,watir,Html,Ruby,Watir,我是否可以编写watir代码来单击此按钮元素 必须触发onclick事件 <button onclick="wizardAction('start', 'Starte Upgrade')"> <table align="center" cellspacing="0"> <tbody> <tr> <td><img src="/static/images/

我是否可以编写watir代码来单击此按钮元素

必须触发onclick事件

<button onclick="wizardAction('start', 'Starte Upgrade')">
    <table align="center" cellspacing="0">
        <tbody>
            <tr>
                <td><img src="/static/images/stock/gtk-ok.png" align="left" height="16" width="16"></td>
                <td nowrap="nowrap">Starte Upgrade</td>
            </tr>
        </tbody>
    </table>
</button>
但似乎不支持onclick:

> ruby upgrade-module.rb

c:/ruby/lib/ruby/gems/1.8/gems/watir-1.6.5/lib/watir/locator.rb:143:in `match?':
 onclick is an unknown way of finding an <INPUT> element ((?-mix:start)) (Watir:
:Exception::MissingWayOfFindingObjectException)
        from c:/ruby/lib/ruby/gems/1.8/gems/watir-1.6.5/lib/watir/locator.rb:126
:in `locate'
        from c:/ruby/lib/ruby/gems/1.8/gems/watir-1.6.5/lib/watir/locator.rb:124
:in `each'
        from c:/ruby/lib/ruby/gems/1.8/gems/watir-1.6.5/lib/watir/locator.rb:124
:in `locate'
        from c:/ruby/lib/ruby/gems/1.8/gems/watir-1.6.5/lib/watir/locator.rb:122
:in `catch'
        from c:/ruby/lib/ruby/gems/1.8/gems/watir-1.6.5/lib/watir/locator.rb:122
:in `locate'
        from c:/ruby/lib/ruby/gems/1.8/gems/watir-1.6.5/lib/watir/locator.rb:119
:in `each'
        from c:/ruby/lib/ruby/gems/1.8/gems/watir-1.6.5/lib/watir/locator.rb:119
:in `locate'
        from c:/ruby/lib/ruby/gems/1.8/gems/watir-1.6.5/lib/watir/container.rb:8
04:in `locate_input_element'
        from c:/ruby/lib/ruby/gems/1.8/gems/watir-1.6.5/lib/watir/input_elements
.rb:5:in `locate'
        from c:/ruby/lib/ruby/gems/1.8/gems/watir-1.6.5/lib/watir/element.rb:53:
in `assert_exists'
        from c:/ruby/lib/ruby/gems/1.8/gems/watir-1.6.5/lib/watir/element.rb:288
:in `enabled?'
        from c:/ruby/lib/ruby/gems/1.8/gems/watir-1.6.5/lib/watir/element.rb:60:
in `assert_enabled'
        from c:/ruby/lib/ruby/gems/1.8/gems/watir-1.6.5/lib/watir/element.rb:233
:in `click!'
        from c:/ruby/lib/ruby/gems/1.8/gems/watir-1.6.5/lib/watir/element.rb:219
:in `click'
        from upgrade-module.rb:19
ruby upgrade-module.rb c:/ruby/lib/ruby/gems/1.8/gems/watir-1.6.5/lib/watir/locator.rb:143:in'match?' onclick是一种查找元素的未知方法((?-mix:start))(Watir: :Exception::MissingWayOfFindingObject(异常) 来自c:/ruby/lib/ruby/gems/1.8/gems/watir-1.6.5/lib/watir/locator.rb:126 :在'locate'中 来自c:/ruby/lib/ruby/gems/1.8/gems/watir-1.6.5/lib/watir/locator.rb:124 :在'each'中 来自c:/ruby/lib/ruby/gems/1.8/gems/watir-1.6.5/lib/watir/locator.rb:124 :在'locate'中 来自c:/ruby/lib/ruby/gems/1.8/gems/watir-1.6.5/lib/watir/locator.rb:122 :在“catch”中 来自c:/ruby/lib/ruby/gems/1.8/gems/watir-1.6.5/lib/watir/locator.rb:122 :在'locate'中 来自c:/ruby/lib/ruby/gems/1.8/gems/watir-1.6.5/lib/watir/locator.rb:119 :在'each'中 来自c:/ruby/lib/ruby/gems/1.8/gems/watir-1.6.5/lib/watir/locator.rb:119 :在'locate'中 来自c:/ruby/lib/ruby/gems/1.8/gems/watir-1.6.5/lib/watir/container.rb:8 04:在“定位输入元素”中 来自c:/ruby/lib/ruby/gems/1.8/gems/watir-1.6.5/lib/watir/input_元素 .rb:5:在“定位”中 来自c:/ruby/lib/ruby/gems/1.8/gems/watir-1.6.5/lib/watir/element.rb:53: 在'assert_exists'中 来自c:/ruby/lib/ruby/gems/1.8/gems/watir-1.6.5/lib/watir/element.rb:288 :在'enabled'中 来自c:/ruby/lib/ruby/gems/1.8/gems/watir-1.6.5/lib/watir/element.rb:60: 在“assert_enabled”中 来自c:/ruby/lib/ruby/gems/1.8/gems/watir-1.6.5/lib/watir/element.rb:233 :点击 来自c:/ruby/lib/ruby/gems/1.8/gems/watir-1.6.5/lib/watir/element.rb:219 :在“单击”中 来自升级模块。rb:19
我遇到过这样的问题。如果不支持onclick属性,则可以执行以下操作

b.
  buttons.
  to_a.
  select{|but| but.attribute_value(:onclick).match(/start/) }.
  first.
  click
这只是我从内存中输入的东西,所以可能需要一些调整。但它允许您匹配Watir不一定支持的内容

我认为还有一些方法可以使用Watir进行XPath查询,您可能还想研究一下这一点

其中一种方法可以工作(未经测试):

更多信息:


Željko谢谢你,我试了第二行(browser.cell),它很管用。
b.
  buttons.
  to_a.
  select{|but| but.attribute_value(:onclick).match(/start/) }.
  first.
  click
browser.image(:src => /gtk-ok/).click
browser.cell(:text => "Starte Upgrade").click
browser.button(:index => 1).click # assumes that it is the first button on the page
browser.button(:xpath => "//button[@onclick='wizardAction(\'start\', \'Starte Upgrade\')']").click