Seleniumでselectメニューのテストを極める

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値を代入しておきます。

  1. クリックしたいselectタグのidを指定して要素を取得する
  2. selectタグで囲われたoptionタグをディクショナリ型で取得する
  3. optionタグの要素でループさせる
  4. ループ中に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タグについては、、超レアケースと思うので割愛しました。

※気が向いたら追記するかもしれません。。。

スポンサーリンク
おすすめの記事