php-webdriverでtarget="_blank"付きのアンカータグ対策から引き続きメモ


phpwebdriver_select_click


今回はセレクトボックスの値を選択してみる。

セレクトボックスは今までのinputタグと異なり、

セレクトボックスの場所を指定して、キーボード操作で値を選択するという形で、

値の指定の際の操作が増える。


該当する箇所のHTMLは

<select name="Customer[area]" id="" class="input-pref">
	<option value="">都道府県名</option>
	<option value="1">北海道</option>
	<option value="2">青森県</option>
	<option value="3">岩手県</option>
	<!-- 他の県は省略 -->
</select>

このようになっている。


値を選択するためのスクリプトを書いてみると、

$driver->findElement(WebDriverBy::name("Customer[area]"))->click();
$driver->getKeyboard()->sendKeys("京都府");

findElementで要素を指定して、一旦クリック。

ブラウザ側ではこれでセレクトボックスにフォーカスが当たり、ドライバ側でキーボード操作に切り替え、選択したいオプションの値を指定する。

指定の際、optionのvalue属性ではなく、タグに囲まれている値を選択するとのこと。


この書き方だと動作しないことが時々あったので、

$element = $driver->findElement(WebDriverBy::name("Customer[area]"));
$element->click();
$driver->getKeyboard()->sendKeys("京都府");
$element->click();

このように一旦$element変数に要素を挿入してフォーカスを当て、

値を指定してから再度クリックをしてフォーカスを当てることで、

選択直後に画面遷移を行うような処理の場合でも選択することができるようになった。