Ruby Watir,Dijit小部件,从“选择列表”设置值

Ruby Watir,Dijit小部件,从“选择列表”设置值,ruby,set,watir,dojo,selectlist,Ruby,Set,Watir,Dojo,Selectlist,我希望能够单击以查看可用选项/帐户列表,开始时看起来是隐藏的,然后将dijit小部件select_list设置为特定值 我可以使用 @@ie.element(:css, "#accountSwitcherSelect.dijitDownArrowButton").flash #works 但不能使用“单击”或“设置”: @@ie.element(:css, "#accountSwitcherSelect.dijitDownArrowButton").click #no errors, but

我希望能够单击以查看可用选项/帐户列表,开始时看起来是隐藏的,然后将dijit小部件select_list设置为特定值

我可以使用

@@ie.element(:css, "#accountSwitcherSelect.dijitDownArrowButton").flash
#works
但不能使用“单击”或“设置”:

@@ie.element(:css, "#accountSwitcherSelect.dijitDownArrowButton").click
#no errors, but doesn't do anything

@@ie.element(:css, "#accountSwitcherSelect.dijitSelectLabel").set("Account2")    
#NoMethodError: undefined method `set' for <Watir::HTMLElement:0x4d6af60>

@@ie.element(:css, "#accountSwitcherSelect.dijitSelectLabel").send_keys("Account3")
#NoMethodError: undefined method `send_keys' for <Watir::HTMLElement:0x4d6af60>
工作很好

以下是网站背后的当前html:

<table id="accountSwitcherSelect" class="dijit dijitReset dijitInline dijitLeft dijitDownArrowButton dijitSelectFixedWidth dijitValidationTextBoxFixedWidth dijitSelect dijitValidationTextBox" lang="en-US" cellspacing="0" cellpadding="0" aria-haspopup="true" role="listbox" data-dojo-attach-point="_buttonNode,tableNode,focusNode" style="-moz-user-select: none; width: 207px;" tabindex="0" widgetid="accountSwitcherSelect" aria-expanded="false" aria-invalid="false">
  <tbody role="presentation">
    <tr role="presentation">
      <td class="dijitReset dijitStretch dijitButtonContents" role="presentation">
        <div class="dijitReset dijitInputField dijitButtonText" role="presentation" data-dojo-attach-point="containerNode,_popupStateNode" popupactive="true">
          <span class="dijitReset dijitInline dijitSelectLabel dijitValidationTextBoxLabel " role="option">Account1</span>
        </div>
        <div class="dijitReset dijitValidationContainer">
      </td>
      <td class="dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton dijitArrowButtonContainer" role="presentation" data-dojo-attach-point="titleNode">
        <input class="dijitReset dijitInputField dijitArrowButtonInner" type="text" role="presentation" readonly="readonly" tabindex="-1" value="? ">
      </td>

假设“选择”列表与上的类似,则需要:

单击输入元素的下拉箭头 单击包含需要td元素的文本的单元格 在您的情况下,它看起来像:

@@ie.input(:class => 'dijitArrowButtonInner').click
@@ie.td(:class => 'dijitMenuItemLabel', :text => /Account1/i).click
下面是一个工作示例,尽管它依赖于仍然在线可用的dijitcss文件

require 'watir-webdriver'

browser = Watir::Browser.new
browser.goto "data:text/html,#{DATA.read}"
browser.input(:class => 'dijitArrowButtonInner').click
browser.td(:class => 'dijitMenuItemLabel', :text => 'Arizona').click
sleep(10)  # Just so that you can see the dropdown has changed
browser.close

__END__

<html>
    <head>
        <link rel="stylesheet" href="https://dojotoolkit.org/reference-guide/1.9/_static/js/dijit/themes/claro/claro.css">
        <script>dojoConfig = {async: true, parseOnLoad: true}</script>
        <script src="https://dojotoolkit.org/reference-guide/1.9/_static/js/dojo/dojo.js"></script>
        <script>require(["dojo/parser", "dijit/form/Select"]);</script>
    </head>
    <body class="claro">
        <div name="select3" value="AL" data-dojo-type="dijit/form/Select">
            <span value="AL"><b>Alabama</b></span>
            <span value="AZ"><i>Arizona</i></span>
        </div>
    </body>
</html>

请注意,此代码中的表格是关闭下拉列表时选择的选项。

谢谢Justin。。旧的ruby/watir不支持输入元素吗?NoMethodError:未定义的“输入”方法,用于表示年龄有多大?看起来IEinput是在v3.0.0中添加的。如果您让我知道您使用的是哪个版本,我可以查看是否找到了兼容的解决方案(假设不允许升级)。我临时升级到watir-classic-4.0.1,现在可以找到输入元素,但已禁用。。Watir::Exception::ObjectDisabledException:对象{:标记\名称=>[input],:类=>dijitArrowButtonInner}已禁用C:/ruby/lib/ruby/gems/1.8/gems/watir-classic-4.0.1/lib/watir-classic/element.rb:334:in assert_enable d'C:/ruby/lib/ruby/gems/1.8/gems/watir-classic-4.0.1/lib/watir-classic/element.rb:475:in执行动作C:/ruby/lib/lib/ruby/gems/watir-classic-4.0.1/element.1/lib/watir-classic/element.354:in'click!'即使删除了禁用的属性,单击元素也不会触发下拉列表。需要深入了解下拉列表的工作原理。有人对如何访问下拉列表有什么建议吗?
require 'watir-webdriver'

browser = Watir::Browser.new
browser.goto "data:text/html,#{DATA.read}"
browser.input(:class => 'dijitArrowButtonInner').click
browser.td(:class => 'dijitMenuItemLabel', :text => 'Arizona').click
sleep(10)  # Just so that you can see the dropdown has changed
browser.close

__END__

<html>
    <head>
        <link rel="stylesheet" href="https://dojotoolkit.org/reference-guide/1.9/_static/js/dijit/themes/claro/claro.css">
        <script>dojoConfig = {async: true, parseOnLoad: true}</script>
        <script src="https://dojotoolkit.org/reference-guide/1.9/_static/js/dojo/dojo.js"></script>
        <script>require(["dojo/parser", "dijit/form/Select"]);</script>
    </head>
    <body class="claro">
        <div name="select3" value="AL" data-dojo-type="dijit/form/Select">
            <span value="AL"><b>Alabama</b></span>
            <span value="AZ"><i>Arizona</i></span>
        </div>
    </body>
</html>
browser.table(:id => 'dijit_form_Select_0').send_keys :enter
browser.td(:class => 'dijitMenuItemLabel', :text => 'Arizona').click