Ruby 访问字段集中的select_列表时,pageobject上出现语法错误

Ruby 访问字段集中的select_列表时,pageobject上出现语法错误,ruby,watir-webdriver,fieldset,page-object-gem,Ruby,Watir Webdriver,Fieldset,Page Object Gem,我试图通过Cheezy的pageobject访问字段集中的select_列表 整个html太长,无法发布(仅字段集就超过200行),但我可以提供所有id之类的行 字段集: <fieldset class="dartPayer-Insurance" style="width: 730px;"> 尝试运行cucumber测试时出现的错误: (eval):1: syntax error, unexpected '(', expecting $end {:id=>"dartPa

我试图通过Cheezy的pageobject访问字段集中的select_列表

整个html太长,无法发布(仅字段集就超过200行),但我可以提供所有id之类的行

字段集:

<fieldset class="dartPayer-Insurance" style="width: 730px;">
尝试运行cucumber测试时出现的错误:

 (eval):1: syntax error, unexpected '(', expecting $end
  {:id=>"dartPayer-Insurance"}(identifier)
                               ^ (SyntaxError)
当我尝试使用此行设置选择列表时,会发生此错误:

self.send(field, input)  (Where field is "payer_insurance=" and input is "UMA")
这一行适用于其他页面,因此我相当确定这不是问题的一部分。我确信pageobject行中的语法很简单,但我找不到任何使用pageobject的文档。我能找到的唯一参考资料是我之前提出的一个问题:

谁能告诉我我做错了什么

提前感谢您的帮助

更新:重现问题的示例:

给定包含html的页面:

<fieldset class="dartPayer-Insurance" style="width: 730px;">
    <select id="dartPayer-Payer" style="width: 235px;">
        <option value="UMA">UMA</option>
    </select>
</fieldset>
运行以下代码:

browser = Watir::Browser.new
browser.goto('C:\Scripts\Misc\Programming\PageObject\test.htm') 
page = MyPage.new(browser)

field = "payer_insurance="
input = "UMA"
page.input_payer(field, input)
生成以下异常:

C:/Ruby193/lib/ruby/gems/1.9.1/gems/page-object-0.9.0/lib/page-object/platforms/watir_webdriver/page_object.rb:968:in `instance_eval': (eval):1: syntax error, unexpected '(', expecting $end (SyntaxError)
{:class=>"dartPayer-Insurance"}(identifier)
                                ^
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/page-object-0.9.0/lib/page-object/platforms/watir_webdriver/page_object.rb:968:in `find_watir_element'
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/page-object-0.9.0/lib/page-object/platforms/watir_webdriver/page_object.rb:907:in `element_for'
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/page-object-0.9.0/lib/page-object/element_locators.rb:11:in `element'
from pageobject.rb:7:in `block in <class:MyPage>'
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/page-object-0.9.0/lib/page-object.rb:379:in `instance_eval'
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/page-object-0.9.0/lib/page-object.rb:379:in `call_block'
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/page-object-0.9.0/lib/page-object/accessors.rb:1089:in `block in standard_methods'
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/page-object-0.9.0/lib/page-object/accessors.rb:246:in `block in select_list'
from pageobject.rb:10:in `input_payer'
from pageobject.rb:25:in `<main>'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/page-object-0.9.0/lib/page-object/platforms/watir\u webdriver/page\u object.rb:968:in`instance\u eval':(eval):1:语法错误,意外的'(',应为$end(SyntaxError)
{:class=>“dartPayer保险”}(标识符)
^
来自C:/Ruby193/lib/ruby/gems/1.9.1/gems/page-object-0.9.0/lib/page-object/platforms/watir\u webdriver/page\u object.rb:968:in'find\u watir\u element'
来自C:/Ruby193/lib/ruby/gems/1.9.1/gems/page-object-0.9.0/lib/page-object/platforms/watir\u webdriver/page\u object.rb:907:in'element\u for'
来自C:/Ruby193/lib/ruby/gems/1.9.1/gems/page-object-0.9.0/lib/page-object/element\u locators.rb:11:in'element'
来自pageobject.rb:7:in'block in'
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/page-object-0.9.0/lib/page-object.rb:379:in'instance_eval'
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/page-object-0.9.0/lib/page-object.rb:379:in'call_block'
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/page-object-0.9.0/lib/page-object/accessors.rb:1089:in`block in standard_methods'
来自C:/Ruby193/lib/ruby/gems/1.9.1/gems/page-object-0.9.0/lib/page-object/accessors.rb:246:in`block in select_list'
来自pageobject.rb:10:“输入\付款人”中
来自pageobject.rb:25:in`'

解决方案

选择列表所需的访问器是:

select_list(:payer_insurance){ element(:fieldset, :class => "dartPayer-Insurance").select_list_element(:id => "dartPayer-Payer") }
问题

由于以下原因,您出现语法错误:

element(:class => "dartPayer-Insurance")
在中,您可以看到方法定义为:

(Object) element(tag, identifier = {:index => 0})

Finds an element

Parameters:
    the (Symbol) — name of the tag for the element
    identifier (Hash) (defaults to: {:index => 0}) — how we find an element. You can use a multiple paramaters by combining of any of the following except xpath
原始代码缺少
标记
参数,导致异常


请注意,选择列表id也不正确-使用
dartPayer PayerList
而不是
dartPayer Payer

对我进行否决之前,请您解释原因,以便我下次修复它。您可能被否决,因为人们不了解如何重现您的问题。我将您的问题更新为I包括一个扩展代码以重现问题的工作示例。希望这将允许重新打开问题。如果问题重新打开,我将添加一个答案,但同时,您需要的代码是
select_list(:payer_insurance){element(:fieldset,:class=>“dartPayer insurance”)。select_list_element(:id=>“dartPayer Payer”)}
。使用
元素时,需要指定标记名。排除它会导致出现异常。选择列表的id也不正确。噢,很抱歉id被禁用。其中包含一些变量(如#{VIEW}),我一定是在编辑时把它弄糟了。我的代码中有正确的id。感谢您编辑此问题。我将努力从您的示例中编写更高质量的问题。我非常感谢您的帮助。建议的修复方法确实对我有用,一旦您添加一个,我会将您设置为答案。
select_list(:payer_insurance){ element(:fieldset, :class => "dartPayer-Insurance").select_list_element(:id => "dartPayer-Payer") }
element(:class => "dartPayer-Insurance")
(Object) element(tag, identifier = {:index => 0})

Finds an element

Parameters:
    the (Symbol) — name of the tag for the element
    identifier (Hash) (defaults to: {:index => 0}) — how we find an element. You can use a multiple paramaters by combining of any of the following except xpath