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の関数の適切な再定義の仕方がわからない(いまここ)。
職業プログラマならこんなくだらんことで時間を使わないで、妥協してラベルの方を変えるんだろうな。って俺一応職業プログラマだし。