黄瓜步骤中的正则表达式

时间:2009-07-27 05:27:26

标签: ruby-on-rails ruby regex cucumber webrat

Cucumber产生了一些整洁的webrat正则表达式步骤。我尝试这个时遇到了一个问题。

功能:

And I fill in "Telephone (Home)" with "61234567"

在网络漫步中:

When /^I fill in "([^\"]*)" with "([^\"]*)"$/ do |field, value|
  fill_in(field, :with => value) 
end

遇到错误:

Could not find field: "Telephone (Home)" (Webrat::NotFoundError)

“Home”之间的括号似乎给出了问题。如何调整正则表达式来计算括号?

更新

似乎正则表达式不是问题,因为“ field ”实例变量确实产生了“Telephone(Home)”。真正的问题是webrat的“ fill_in ”方法解析字段变量的方式。

3 个答案:

答案 0 :(得分:1)

如果您只想捕获“电话”,请尝试:

/^I fill in "(\w+).*?" with "([^\"]*)"$/

如果它是“Home”,那你试试这个:

/^I fill in "(?:.*?\()?(.+?)\)?" with "([^\"]*)"$/;

答案 1 :(得分:0)

这也遇到了我的字段“(退出)”......

你可以打电话给id字段吗?

fill_in("user_telephone_home", :with => data)

答案 2 :(得分:0)

我在将标签与webrat中的字段匹配时遇到了类似的问题,我想出了这个代码片段,它松散了用于将标签与字段匹配的正则表达式。也许它会帮助你。

我在features/support/env.rb

中有这个
module Webrat
  module Locators
    class FieldLabeledLocator < Locator
      def matching_label_elements_with_numbering
        label_elements.select do |label_element|
          text(label_element) =~ /^.*#{Regexp.escape(@value.to_s)}.*$/i
        end
      end
      alias_method_chain :matching_label_elements, :numbering
    end
  end
end

http://gist.github.com/169215