【问题标题】:Cannot read span elements无法读取跨度元素
【发布时间】:2013-01-03 02:13:29
【问题描述】:

嗨,因为我做了 gem install watir watir-classic 我的脚本不再读取 span 元素。你能帮我解决这个问题吗

这是我的例子

来源

Rented 
<SPAN class="displayData" style="padding-left:2px; width: 15;"><span name="tab4RateInfoForm.vehicleGroup"/>F</span></SPAN>&nbsp;

我的代码

carGroup=browser.span(:name => 'tab4RateInfoForm.vehicleGroup').text

错误信息

C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.3.0/lib/watir-classic/locator.rb:79:in `rescue in match?': name is an unknown way of finding a <span> element (tab4RateInfoForm.vehicleGroup) (Watir::Exception::MissingWayOfFindingObjectException)
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.3.0/lib/watir-classic/locator.rb:76:in `match?'
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.3.0/lib/watir-classic/locator.rb:62:in `block in match_with_specifiers?'
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.3.0/lib/watir-classic/locator.rb:59:in `each'
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.3.0/lib/watir-classic/locator.rb:59:in `all?'
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.3.0/lib/watir-classic/locator.rb:59:in `match_with_specifiers?'
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.3.0/lib/watir-classic/locator.rb:22:in `block (2 levels) in each'
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.3.0/lib/watir-classic/locator.rb:140:in `block in each_element'
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.3.0/lib/watir-classic/locator.rb:139:in `each'
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.3.0/lib/watir-classic/locator.rb:139:in `each_element'
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.3.0/lib/watir-classic/locator.rb:21:in `block in each'
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.3.0/lib/watir-classic/locator.rb:20:in `each'
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.3.0/lib/watir-classic/locator.rb:20:in `each'
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.3.0/lib/watir-classic/locator.rb:150:in `locate'
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.3.0/lib/watir-classic/element.rb:33:in `locate'
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.3.0/lib/watir-classic/element.rb:63:in `assert_exists'
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.3.0/lib/watir-classic/element.rb:132:in `text'

【问题讨论】:

    标签: ruby webdriver watir


    【解决方案1】:

    解决方案 1:使用 css 定位器

    您必须使用 css-locator(或 xpath):

    carGroup = browser.span(:css, 'span[name="tab4RateInfoForm.vehicleGroup"]').text
    

    解决方案 2:猴子补丁

    或者,如果您有很多使用 name 属性的旧脚本,您可以修改 Watir 以使所有元素(或特定元素,如果需要)具有 name 方法。

    将以下内容添加到您需要的地方:

    Watir::IE.new(true)
    module Watir
      class Element
        def name
          return self.attribute_value('name')
        end
      end
    end
    

    您原来的方法现在应该可以工作了。

    【讨论】:

    • 解决方案 1:使用 css 定位器不起作用 解决方案 2:猴子补丁 效果很好 刚刚在 Locator.rb 和所有脚本中添加了一个新类 class Element def name return self.attribute_value('name') end end 再次工作,谢谢
    • 解决方案 1 需要为属性值加上引号。答案已更新。
    • 在猴子修补之前,我会将您的 html 更改为有效 - 名称不是 html 中 span 元素的有效属性。我会像这样browser.span(:class =&gt; "displayData").span.text 或像这样browser.span(:text =&gt; "F") 访问那个跨度。
    【解决方案2】:

    看起来span 元素不能再通过name 属性访问。

    试试这个(使用通用的element 而不是span):

    carGroup=browser.element(:name => 'tab4RateInfoForm.vehicleGroup').text
    

    【讨论】:

    • 抱歉没用。我还需要更新什么吗? 这里是错误消息 C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.3.0/lib/watir-classic/locator.rb:79:in rescue in match?': name is an unknown way to find a element (tab4RateInfoForm.vehicleGroup) (Watir::Exception::MissingWayOfFindingObjectException) 从 C:/ Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.3.0/lib/watir-classic/locator.rb:76:in match?' from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.3.0/lib/watir-classic/locator.rb:62:in block in match_with_specifiers?'
    • 看来您找到了解决方案。
    猜你喜欢
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    • 1970-01-01
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多