Capybara / Selenium / Chrome无法更改选择下拉菜单的值

时间:2011-08-29 03:05:51

标签: html ruby selenium cucumber capybara

当我使用测试下面的功能,步骤和HTML运行我的测试时没有错误(直到它在断言步骤失败),但我可以看到下拉选择没有发生变化。我做错了什么?

HTML:

<div class='field'> 
  <label for="verification_value">Verification Number</label> 
  <input id="verification_value" type="text" /> 
</div> 
<div class='field'> 
  <label for="month">Month</label> 
  <select id="month"> 
    <option value="1">1 - January</option> 
    <option value="2">2 - February</option> 
    <option value="3">3 - March</option> 
    <option value="4">4 - April</option> 
    <option value="5">5 - May</option> 
    <option value="6">6 - June</option> 
    <option value="7">7 - July</option> 
    <option value="8">8 - August</option> 
    <option value="9">9 - September</option> 
    <option value="10">10 - October</option> 
    <option value="11">11 - November</option> 
    <option value="12">12 - December</option> 
  </select> 
 </div>

步骤:

When /^(?:|I )select "([^"]*)" from "([^"]*)"$/ do |value, field|
  select(value, :from => field)
end

特征:

Feature: In order for this to work, a select menu should be changeable

    @javascript
    Scenario: A user follows the steps to successfully do fun stuff
        Given I go to a  page
        And I fill in "verification_value" with "12345"
        And I select "2 - February" from  "month"
        Then I should see "everything worked" within "body"

And I select "2" from "month"实际上不会产生任何错误,它只是不会更改select选项。应该将选择设置为2 - February

我也尝试使用firefox驱动程序,我得到了相同的结果

更新

关于正则表达式,我添加了一个puts行,它确实已经运行了

When /^(?:|I )select "([^"]*)" from "([^"]*)"$/ do |value, field|
  puts "STEP MATCHED"   # << it did put "STEP MATCHED"
  select(value, :from => field)
end

我从默认的web_steps.rb复制了它,所以我很惊讶它不适用于某些人,但对我来说效果很好。

2 个答案:

答案 0 :(得分:1)

看起来你在SELECT标签中有一个额外的双引号。这可能会导致问题。

答案 1 :(得分:0)

我没有尝试过您的代码,我现在没有时间,但您可能会考虑测试该正则表达式。如果您试图避免在该步骤定义中要求“I”,我建议您这样做:

When /^(?:I )?select "([^"]*)" from "([^"]*)"$/ do |value, field|
  select(value, :from => field)
end

捕获组后面的问号(用括号表示)表示捕获组的内容是可选的。如果先前的答案是关于它为什么不起作用的任何指示,这可能有助于它确定步骤。