4

我在 SitePrism 页面中定义了以下元素:

element :type, "select[id='type']"
elements :type_options, "select[id='type'] option"

在我的黄瓜步骤定义中,我有以下代码可以根据元素值从选择框中选择一个项目:

@app.new.type_options.each {|name| name.click if name.text.upcase == value.upcase}

我不是很喜欢这个实现,但是当在 chrome 中运行 Capybara 时它确实可以完美运行,但是当我无头运行它时会失败,所以我认为必须有一种替代/更好的方法来选择下拉项目。

理想情况下,我希望能够做类似的事情@app.new_r.r_type.select 'value',但我不知道如何在 SitePrism 中做到这一点。

所以,我的第一个问题是,任何人都可以推荐一种优雅的方式来根据 SitePrism 的值从下拉列表中选择一个项目吗?

我的第二个问题是,知道为什么上面的代码在无头运行时会失败吗?

4

1 回答 1

12

我有一个类似的问题,我无法选择我想要的选项。我遇到了这个问题,它让我意识到我的问题是您必须将文本而不是值发送到 select()。

例如,如果我有 HTML

<select id="things">
  <option value="thing1">The First Thing</option>
  <option value="thing2">The Second Thing</option>
  <option value="thing3">The Third Thing</option>
</select>

在我的 SitePrism::Page 类中,我有:

element :things, "select[id='things']"

我以为我需要做:

@my_page.things.select("thing1")

那是行不通的。相反,您必须这样做:

@my_page.things.select("The First Thing")

我知道这与尝试根据从 SitePrism 获得的值进行选择略有不同,就像最初询问的那样。但我认为这种关于传递给 select() 的内容的区别可能会对某人有所帮助。

于 2014-06-05T17:15:15.870 回答