【问题标题】:Capybara/Selenium/Chrome not able to change value of select drop-downCapybara/Selenium/Chrome 无法更改选择下拉菜单的值
【发布时间】:2011-11-05 17:50:22
【问题描述】:

当我使用下面的功能、步骤和 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" 实际上不会产生任何错误,它只是不会更改选择选项。它应该将选择设置为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 复制了它,所以我很惊讶它对某些人不起作用,但对我来说很好。

【问题讨论】:

  • Cucumber 真的在调用这一步吗?当我尝试使用您提供的代码时,它与正则表达式不匹配,跳过了该步骤,并建议我使用正则表达式 /^I select "([^"]*)" from "([^"]*)"$/ 创建一个步骤。当我这样做时,它按预期工作。
  • 只是为了排除它 - 您是否100% 确定该值未设置?会不会是后面那一步坏了?我倾向于在select 调用之后 截取屏幕截图,或者只截取sleep,以便您有足够的时间查看浏览器中发生的情况。

标签: html ruby selenium cucumber capybara


【解决方案1】:

看起来您在 SELECT 标记中有一个额外的双引号。这可能是导致问题的原因。

【讨论】:

  • 那是我帖子的错字,代码只有正确的引号......不过很好
【解决方案2】:

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

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

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

【讨论】:

  • 感谢@SeanMeh,但正则表达式不是问题,请看我更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-23
  • 2018-04-02
相关资源
最近更新 更多