Site Prism,Capybara:带变量的选择器

Rim*_*ian 2 ruby capybara ruby-on-rails-3 pageobjects site-prism

我正在使用site_prism来实现水豚中的页面对象模型。看起来很有趣。

我如何指定一个选择器,例如“[data-id='x']”,其中x是整数?像这样的东西:

class Home < SitePrism::Page
  set_url "http://www.example.com"
  element :row, "[data-id='@id']"
end
Run Code Online (Sandbox Code Playgroud)

然后在我的测试中:

Then /^the home page should contain a row$/ do
  @home.should have_row 1234
end
Run Code Online (Sandbox Code Playgroud)

Nat*_*yer 5

由于 SitePrism 在定义元素时设置元素定位器,因此您的建议不起作用。为了实现您的要求,请查看以下内容:

class Home < SitePrism::Page
  elements :rows, "tr[data-id]"

  def row_ids
    rows.map {|row| row['data-id']}
  end
end
Run Code Online (Sandbox Code Playgroud)

它们不是映射单行,而是全部映射(使用elements而不是element)。一个名为 的单独方法row_ids收集具有“data-id”值的所有行,将所有这些值映射到一个新数组中,然后返回该新数组。

然后测试将包含以下内容:

Then /^the home page should contain a row$/ do
  @home.row_ids.should include @id
end
Run Code Online (Sandbox Code Playgroud)

...它将检查是否存在 ID 匹配的行@id

不太漂亮,但应该可以。