首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >已选择dropdown,但watir表示已禁用

已选择dropdown,但watir表示已禁用
EN

Stack Overflow用户
提问于 2013-01-30 06:44:00
回答 1查看 936关注 0票数 3

我可以在下拉列表中设置一个选项,但随后我收到一条错误消息。我发现一个在线站点将返回相同的错误:

http://www.100candles.com/floating_candles.htm

代码语言:javascript
复制
irb(main):124:0>  $ie = Watir::IE.attach(:url, /100candles/)
=> #<Watir::IE:0x..fd64f0146 url="http://www.100candles.com/t/Vessels?PN=1&SB=Updated" title="Vessels - 100 Candles">
irb(main):126:0> $ie.select_list(:name, "SB").flash
=> #<Watir::SelectList:0x4960ea5e located=true specifiers={:tag_name=>["select"], :name=>"SB"}>
irb(main):127:0> $ie.select_list(:name, "SB").select("Price")
Watir::Exception::ObjectDisabledException: object {:index=>0, :ole_object=>#<WIN32OLE:0x3759e58>} is disabled
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.4.0/lib/watir-classic/element.rb:329:in `assert_enabled'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.4.0/lib/watir-classic/element.rb:470:in `perform_action'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.4.0/lib/watir-classic/input_elements.rb:117:in `select'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.4.0/lib/watir-classic/input_elements.rb:46:in `each'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.4.0/lib/watir-classic/input_elements.rb:46:in `block in select'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.4.0/lib/watir-classic/element.rb:472:in `perform_action'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.4.0/lib/watir-classic/input_elements.rb:41:in `select'
    from (irb):127
    from C:/Ruby193/bin/irb:12:in `<main>'
irb(main):128:0>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-30 11:40:03

Problem

此选项适用于某些选项(例如批量成本),但不适用于其他选项(例如价格)。查看SelectList#select的watir代码:

代码语言:javascript
复制
def select(item)
  matching_options = []
  perform_action do
    matching_options = matching_items_in_select_list(:text, item) +
      matching_items_in_select_list(:label, item) +
      matching_items_in_select_list(:value, item)
    raise NoValueFoundException, "No option with :text, :label or :value of #{item.inspect} in this select element" if matching_options.empty?
    matching_options.each(&:select)
  end
  matching_options.first.text
end

和页面html:

代码语言:javascript
复制
<select id="SB" onchange="document.location='/floating_candles.htm?PN=1&amp;SB=' + this.value;" name="SB">
    <optgroup style="font-style: normal;" label="Please Choose">
    <option value="">-
    <option value="PieceCost">Bulk Cost
    <option value="Updated">New Arrivals
    <option value="Popularity">Popularity
    <option value="Price">Price
    <option selected="" value="Relevance">Relevance
    </option></optgroup>
</select>

异常的原因可以看到:

  1. 在SelectList#select中,它收集具有与指定条件匹配的文本、标签或值的所有选项。对于“价格”(以及其他失败的选项),该选项被收集(即添加到matching_options) 两次-一次用于文本匹配,一次用于值匹配。相比之下,有效的(例如批量开销)只匹配一次,因为它们的文本和值是different.
  2. SelectList#select,因此将选择每个matching_option。在“价格”的情况下,这意味着页面上的两个selections.
  3. The选择列表具有刷新页面的onchange事件。在"Price“的情况下,选项的第一个选择起作用(在观看脚本时可以看到)。但是,这是第二个失败的选择。我假设在页面刷新时尝试进行选择,从而导致异常。

解决方案

解决方案是直接选择选项元素。这可确保该选项仅被选中一次:

代码语言:javascript
复制
$ie.select_list(:name, "SB").option(:text => "Price").select
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14593427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档