select要素のテストは入力項目の中でも難易度の高いテストです。本記事では、
「どうやって入力画面のoption要素をクリックするのか?」
「確認画面ではどのように正否を評価するのか?」
を順に解説していきます。
テスト用のHTML
select要素テスト用の入力画面、確認画面のhtmlファイルは下記のとおりです。※一部抜粋
入力画面
<body>
<form method="POST" action="confirm.php">
<table border="1">
<tr>
<th>都道府県</th>
<td>
<select name="pref">
<option value="1">北海道</option>
...
<option value="47">沖縄県</option>
</td>
</tr>
</table>
<input name="submit" type="submit" value="送信">
</form>
</body>
確認画面
<body>
<h1>以下の内容で送信してよいですか?</h1>
<table border="1">
<tr>
<th>都道府県</th>
<td>
<span id="pref">東京都</span>
</td>
</tr>
</table>
<input type="button" name="back" value="戻る" onClick="location.href='./index.php'">
<input type="button" name="send" value="送信" onClick="location.href='./thanks.php'">
</body>
指定のoption要素をクリックする
select_pref = driver.find_element_by_name("pref") # selectタグの要素を取得
option_pref = select_pref.find_elements(By.XPATH, "//option") # selectタグの内側のoptionタグを取得
pref_arr = {} # 都道府県のディクショナリを初期化
for pref in option_pref:
pref_arr[pref.get_attribute("value")] = pref.text
if(pref.get_attribute("value") == data["pref"]):
pref.click()
data["pref"]には、選択したいoptionタグのvalue値を代入しておきます。
- クリックしたいselectタグのidを指定して要素を取得する
- selectタグで囲われたoptionタグをディクショナリ型で取得する
- optionタグの要素でループさせる
- ループ中にoptionのvalue値とクリックさせたい変数をチェックする
※pref_arrは確認画面で表示されたテキストをチェックするために使います。
確認画面ではどのように正否を評価するのか?
driver.find_element_by_name("submit").click() #submitボタンをクリック
if pref_arr[data["pref"]] == driver.find_element_by_name("pref").text:
print(driver.find_element_by_name("pref").text+"は見つかりました")
spanタグで囲われた都道府県のテキストが、入力画面でディクショナリ化したpref_arr+data["pref"]のテキストと一致していれば、正しく選択した値が確認画面に表示されていると評価できます。
まとめ
selectのテストの仕方について紹介しました。
入力画面は特に気を使う必要はなく、確認画面は目印となるspanなどがあれば簡単にチェックができます。
multiple属性があてられているselectタグについては、、超レアケースと思うので割愛しました。
※気が向いたら追記するかもしれません。。。