Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 在site prism中使用插值定义元素和定位器?_Ruby_Rspec_Site Prism - Fatal编程技术网

Ruby 在site prism中使用插值定义元素和定位器?

Ruby 在site prism中使用插值定义元素和定位器?,ruby,rspec,site-prism,Ruby,Rspec,Site Prism,您是否知道在使用site prism gem时,是否有一种方法可以使用字符串或符号插值来定义元素和定位器 我正在尝试这样做: 0.upto(@adults) do { element :"adult#{index}", "#passenger-first-name-#{index}" element :"adult#{index}", "#passenger-last-name-#{index}" index+=1 } 但我在执行时遇到以下语法错误: 语法错误,意外的tSYMBEG,应为关键

您是否知道在使用site prism gem时,是否有一种方法可以使用字符串或符号插值来定义元素和定位器

我正在尝试这样做:

0.upto(@adults) do  {
element :"adult#{index}", "#passenger-first-name-#{index}"
element :"adult#{index}", "#passenger-last-name-#{index}"
index+=1
}
但我在执行时遇到以下语法错误:

语法错误,意外的tSYMBEG,应为关键字_do或“{”或“(”(SyntaxError) 元素:“成人#{index}”,“#乘客名字-#{index}”

我在这里读到符号确实允许插值:


也许我遗漏了什么?非常感谢!

这是我的错误。很抱歉!在插值中使用符号是不允许的,问题在于我使用upto循环的方式


抱歉!

我没有尝试过符号插值,但是字符串插值应该可以工作。但是,你们很多人不需要这样做……通常,这种事情可以通过更紧密地使用节对网站建模来解决。你可以使用
元素
方法来代替动态创建元素将创建元素数组。根据您给出的示例,我将执行以下操作:

我从你的例子中猜到你的网站列出了乘客…如果每个乘客都显示在一个单独的div中,那么你可以考虑一些类似的事情:

#section that models a single passenger
class PassengerDetails < SitePrism::Section
  element :first_name, "input[id^=passenger-first-name]"
  element :last_name, "input[^=passenger-last-name]"
end

#page that contains a list of passengers
class FlightManifest < SitePrism::Page
  sections :passengers, PassengerDetails, ".passenger-details"
  #... where ".passenger-details" is a style on the divs that contains a passenger's details
end

我不知道这是否有帮助,或者这对你的网站是否有可能,但它可能会为你指明正确的方向…

谢谢Nat,你的回答给了我一个新的思路!太糟糕了,问题已经解决了。这正是我现在面临的情况(符号插值)
Then /^the flight manifest contains the correct first and last names for each passenger$/ do
  @flight_manifest.passengers.each_with_index do |passenger, i|
    passenger.first_name.text.should == @expected_passengers[i].first_name
    passenger.last_name.text.should == @expected_passengers[i].last_name
  end
end