fill_inでラベル名に括弧が使えない件。

まあCucumberを導入して、下記のようなステップ定義を書いたわけですが

Given /^I fill in valid consigner information$/ do
  fill_in("ログインID", :with => "abc")
  fill_in("メールアドレス", :with => "abc")
  fill_in("パスワード", :with => "abcd")
  fill_in("パスワード(確認用)", :with => "abcd")
end

どうも下記のようなエラーが出てしまう。

      Could not find field: "パスワード(確認用)" (Webrat::NotFoundError)

この括弧を角括弧などに変えても駄目。そこでオープンソースの恩恵にあずかってソースを追ってみたら、ラベルをマッチさせてるコードはこんな感じでした。

# in lib/webrat/core/locators/field_labeled_locator.rb

      def matching_label_elements
        label_elements.select do |label_element|
          text(label_element) =~ /^\W*#{Regexp.escape(@value.to_s)}\b/i
        end
      end

この正規表現中の最後の\bはなんのためにあるんでしょう?おかげで"パスワード(確認用)"のように非単語構成文字で終わるラベルが使えません。こういうときユーザーコードの方を直す(全角文字にするなどして)のは絶対に嫌です。どこをどう直すのがスマートなんでしょうね。

  • suしてインストール済みソースをいじる(一番やだ)
  • プラグインとして入れていじる(やだ)
  • 作者に言う(めんどい)
  • 再定義する(仕様変更に対応できない)
  • あきらめてラベルの方を変える(絶対やだ)

まあせっかくRubyちゃんなので再定義が一番手っ取り早いよなぁ。
でもgemの関数の適切な再定義の仕方がわからない(いまここ)。
職業プログラマならこんなくだらんことで時間を使わないで、妥協してラベルの方を変えるんだろうな。って俺一応職業プログラマだし。