HTML中に以下のようにradio buttonが並んでいるとします。
<input type="radio" name="fruit" value='apple'> リンゴ
<input type="radio" name="fruit" value='orange'> オレンジ
<input type="radio" name="fruit" value='strawberry'> イチゴ
これをRSpecなどでCapybara使ってどうやって選ぶかなのですが、適切にlabelが指定されていればchoose
でいけるものの、上記例のようにlabelが設定されていない場合chooseでは難しそうです。このメソッドは引数にcssやxpathを付けつけてくれないようだからです。
そこで、choose
自体はCapybara::Node::Element
に対して何かしらの操作をしているだけだろうと予想し、Capybara::Node::Actionsのドキュメントを読んでchooseがCapybara::Node::Element
をどういじっているのかを見てみました。
# File 'lib/capybara/node/actions.rb', line 65
def choose(locator, options={})
find(:radio_button, locator, options).set(true)
end
findはcssでもxpathでもなんでも受け付けてくれます。ということで、上記の例でいえば
find("input[name='fruit'][value='apple']").set(true)
でリンゴ用のradio buttonをチェックすることができます。なお、check box用のcheck
も同様にいけるようです。