【问题标题】:How do I select an item from a drop down with Site Prism?如何使用 Site Prism 从下拉列表中选择项目?
【发布时间】:2013-06-03 13:59:11
【问题描述】:

我在 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 的值从下拉列表中选择一个项目?

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

【问题讨论】:

  • 尝试@app.new_r.r_type.select 'value'会得到什么?
  • 我得到一个无法找到选项“事件”(Capybara::ElementNotFound)错误。
  • 更正 - 我之前尝试过这个,但我试图将 'value' 与 'Value' 匹配,并得到一个无法找到选项 "event" (Capybara::ElementNotFound) 错误。修复我的匹配器后,现在可以正常工作了。这也解决了我的第二个问题。谢谢纳特!
  • 如果你能写出这个问题的答案,以造福未来的谷歌员工,那就太好了! :)
  • 酷。现在,如果您可以将其设为实际“答案”(即:将上述内容复制并粘贴到stackoverflow认为的答案中),那就更好了:)

标签: ruby cucumber capybara site-prism


【解决方案1】:

我遇到了类似的问题,我无法选择我想要的选项。我遇到了这个问题,它让我意识到我的问题是您必须将文本而不是值发送到 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() 的内容的区别可能会对某人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多