select要素のmultiple対応

いわゆるリストボックスを表示させるHTMLのselect要素では、multiple属性を付与することによって複数のoptionを選択できるようになります。

現状(バージョン0.6)のSeleniumではこのmultiple属性を持ったselect要素に対してできることが限られており、対応しているとは言いがたい状況です。
現状できることは以下の通りです。

・selectコマンド 
 …select要素のoptionを選択する。
  複数回selectコマンドを実行することで、複数のoptionを選択した状態にすることは可能。

  但し、選択状態のoptionを非選択状態に戻すことができない。

・assertSelectedコマンド
 …select要素の中で選択されているoptionを検証する。

  但し、現状では選択状態になっているoptionのうち先頭のものだけが検証対象となる。
  2番目以降に選択されているoptionの検証ができない。
  (例)

以下のようなリストボックスがあって、青と黄色が選択されている場合、
<select name="SelectColor" size="5" multiple>
    <option value="red">Red</option>
    <option value="blue">Blue</option>    ←選択
    <option value="green">Green</option>
    <option value="yellow">Yellow</option>  ←選択
    <option value="pink">Pink</option>
</select>

以下のテストケースの記述は検証OKになるが、
<tr>
	<td>select</td>
	<td>SelectColor</td>
	<td>label=Blue</td>
</tr>

以下のテストケース記述では「Actual value 'Blue' did not match 'Yellow'」というエラーが発生する。
<tr>
	<td>select</td>
	<td>SelectColor</td>
	<td>label=Yellow</td>
</tr>


次版(バージョン0.7)では以下の対応が盛り込まれ、multiple対応ができるようになる予定のようです。

・Unselectコマンド(新コマンド) …選択したoptionを非選択状態にする
・assertSelectedコマンドのバグ修正

尚、チェックボックスについても同様の新コマンドが追加される予定です。
・checkコマンド/Uncheckコマンド(新コマンド)


ただし、今のところバージョン0.7のリリース日程は未定です。


そこで、現状実施可能な対応策の一つとして、user-extention.jsによる拡張があります。

RubricksというRubyOnRailsを使ったOSSCMSがあるのですが、そこではmultipleのselect要素に対応した以下のコマンドが追加されています。

・CheckMultipleSelectBox      …指定したoptionを選択状態にする
・UncheckMultipleSelectBox     …指定したoptionを非選択状態にする
・assertMultipleSelectBoxChecked  …指定したoptionが選択状態か検証する
・assertMultipleSelectBoxUnchecked …指定したoptionが非選択状態か検証する

コマンドの形式は全て以下のようになっている模様です。

コマンド ターゲット バリュー
コマンド名 select要素のelementLocator option要素のvalue

DLしたファイルの、rubricks\test\selenium\配下にあるuser-extensions.jsの記述をコピーすれば上記コマンドが使用できるようになります。

但し、これらはバージョン0.7がリリースされるまでの暫定対処として扱った方がよいと思います。