Ruby Site Prism,Capybara:带变量的选择器
我正忙于在capybara中实现一个页面对象模型。看起来很有趣 如何指定选择器,例如“[data id='x']”,其中x是整数?大概是这样的:Ruby Site Prism,Capybara:带变量的选择器,ruby,ruby-on-rails-3,capybara,pageobjects,site-prism,Ruby,Ruby On Rails 3,Capybara,Pageobjects,Site Prism,我正忙于在capybara中实现一个页面对象模型。看起来很有趣 如何指定选择器,例如“[data id='x']”,其中x是整数?大概是这样的: class Home < SitePrism::Page set_url "http://www.example.com" element :row, "[data-id='@id']" end 因为SitePrism在定义元素时设置元素定位器,所以您的建议不起作用。要实现您的要求,请查看以下内容: class Home < Si
class Home < SitePrism::Page
set_url "http://www.example.com"
element :row, "[data-id='@id']"
end
因为SitePrism在定义元素时设置元素定位器,所以您的建议不起作用。要实现您的要求,请查看以下内容:
class Home < SitePrism::Page
elements :rows, "tr[data-id]"
def row_ids
rows.map {|row| row['data-id']}
end
end
…这将检查是否存在ID与@ID
匹配的行
没有那么漂亮,但它应该可以工作。因为SitePrism在定义元素时设置元素定位器,所以您的建议不起作用。要实现您的要求,请查看以下内容:
class Home < SitePrism::Page
elements :rows, "tr[data-id]"
def row_ids
rows.map {|row| row['data-id']}
end
end
…这将检查是否存在ID与@ID
匹配的行
没有那么漂亮,但它应该可以工作。或者,如果您喜欢这种方式,您可以进一步了解Nat的建议,并将行元素定义为一个简单的方法,然后可以将id作为参数:
class Home < SitePrism::Page
elements :rows, "tr[data-id]"
def row_with_id(id)
rows.find {|row| row['data-id'] == id.to_s}
end
end
或者,如果您喜欢这种方式,您可以进一步了解Nat的建议,并将row元素定义为一个简单的方法,然后可以将id作为参数:
class Home < SitePrism::Page
elements :rows, "tr[data-id]"
def row_with_id(id)
rows.find {|row| row['data-id'] == id.to_s}
end
end
我通过以下方法解决了这个问题——这是一个黑客行为,决不遵循页面对象模式。但我无法从上面找到答案 我的特色: 我的步骤如下所示: 在我的页面对象类中:
我通过以下方法解决了这个问题——这是一个黑客行为,决不遵循页面对象模式。但我无法从上面找到答案 我的特色: 我的步骤如下所示: 在我的页面对象类中:
纳特,干杯。你写的宝石,所以你应该知道!哈纳特,干杯。你写的宝石,所以你应该知道!哈
Then /^the home page should contain a row$/ do
@home.row_with_id(1234).should_not be_nil
end
Then I click on book 3 from the list
Then /^I click on book (.*) from the list$/ do |index|
page.method_find(index)
end
def method_find(index)
find(div > div > span.nth-child({index})).click
end