黄瓜如何模拟多个下拉选择?

时间:2012-03-14 17:39:41

标签: ruby ruby-on-rails-3 drop-down-menu cucumber capybara

您好我是Cucumber和Ruby on Rails的新手,我无法弄清楚如何模拟多个下拉菜单选择。我能够通过一个下拉菜单(在我的情况下为“评级”)来完成。

Given /the following movies exist:$/ do |movies_table|
  movies_table.hashes.each do |movie|
    # each returned element will be a hash whose key is the table header.
    # you should arrange to add that movie to the database here.
  Given %Q{I am on the Create New Movie page}
  When  %Q{I fill in "Title" with "#{movie[:title]}"}
  And   %Q{I select "#{movie[:rating]}" from "Rating"}
  And   %Q{I select "#{movie[:release_date]}" from "Released On"}
  And   %Q{I press "Save Changes"}
  end
  assert false, "Unimplmemented"
end

我认为与我的问题相关的错误是。

cannot select option, no select box with id, name, or label 'Released On' found (Capybara::ElementNotFound)
      (eval):2:in `select'
      ./step_definitions/web_steps.rb:86:in `/^(?:|I )select "([^"]*)" from "([^"]*)"$/'
      filter_movie_list.feature:9:in `Given the following movies exist:'

我认为我的网络应用程序的相关源代码是

    <label for="movie_title">Title</label>
    <input id="movie_title" name="movie[title]" size="30" type="text" />
    <label for="movie_rating">Rating</label>
    <select id="movie_rating" name="movie[rating]"><option value="G">G</option>
    <option value="PG">PG</option>
    <option value="PG-13">PG-13</option>

    <option value="R">R</option>
    <option value="NC-17">NC-17</option></select>
    <label for="movie_release_date">Released On</label>
    <select id="movie_release_date_1i" name="movie[release_date(1i)]">
    <option value="2007">2007</option>
    <option value="2008">2008</option>

    < And so on ...>

    </select>
    <select id="movie_release_date_3i" name="movie[release_date(3i)]">
    <option value="1">1</option>

    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
    <option value="6">6</option>
    <option value="7">7</option>

    < And so on ...>

    </select>
    <input name="commit" type="submit" value="Save Changes" />

所以我提到标签“Released On”,但我的错误信息显示它没有选择框,但它适用于评级。我的.feature文件也是

的形式
25-Nov-1992

如果它起作用的话。但我认为不是因为我认为红宝石知道如何处理日期。谢谢你的时间。

1 个答案:

答案 0 :(得分:1)

问题是“已发布”标签位于for="movie_release_date",其中选择框为id="movie_release_date_1i"forid值必须与Capybara匹配才能根据标签文本找到字段。

可能的解决方案:

1)如果您可以控制HTML,请更正HTML。

你想要:

<label for="movie_release_date">Released On</label>
<select id="movie_release_date" name="movie[release_date(1i)]">

<label for="movie_release_date_1i">Released On</label>
<select id="movie_release_date_1i" name="movie[release_date(1i)]">

2)按ID或名称访问选择字段。

And   %Q{I select "#{movie[:release_date]}" from "movie_release_date_1i"}

And   %Q{I select "#{movie[:release_date]}" from "movie[release_date(1i)]"}

此选项仅在ID或名称为静态时才起作用(即,末尾的数字始终相同,而不是每次加载页面时随机生成)。

3)直接使用Capybara而不是使用web_steps.rb

如果您直接使用Capybara,而不是使用web_steps.rb(我假设您拥有的步骤来自),您将获得更多用于查找选择字段(ex xpath)的选项。