Seleniumでfileアップロードのテストを極める

type="file"に対してSeleniumでアップロードファイルを指定するテストのメモ

テキストボックスのようにsend_keys関数で指定してOK

スポンサーリンク

HTMLの構造

<body>
	<form action="./confirm.php" method="POST" enctype="multipart/form-data">
		<table border="1">
			<tr>
				<th>ファイル</th>
				<td>
					<input name="file" type="file">
				</td>
			</tr>
		</table>
		<input name="submit" type="submit" value="送信">
	</form>
</body>

何の変哲もないfileアップロードHTMLを想定。

Seleniumでファイルを指定する

elements = driver.find_element(By.XPATH, "//input[@name='file'][@type='file']")
elements.send_keys("ファイルパス")

入力はsend_keysでOK、テキスト入力と同じ感覚で可能です。

注意

存在しないファイルを指定するとエラーするので、念のためチェックしておいた方が親切かと思います。

とりあえず簡単なチェックだけでも。

test_data = "C:\\Users\\ユーザー名\\Desktop\\ファイル名"

if not os.path.isfile(data["file"]):
    print("Error:入力項目「file」のテストデータ(" + test_data + ")は、ファイルが存在しません")
else:
    elements = driver.find_element(By.XPATH, "//input[@name='file'][@type='file']")
    elements.send_keys(test_data)

python初心者地味にハマる

python使い始めて1年たってない人間がつまづいた点がありまして、

ファイル名を指定するとき、Windowsはフォルダを「\]で区切るんですが、これを2重「\\」と表記しないとエラーするってことがわからず、ちょっと時間を使ってしまった。。。

これはエラー

test_data = "C:\Users\ユーザー名\Desktop\ファイル名"
elements = driver.find_element(By.XPATH, "//input[@name='file'][@type='file']")
elements.send_keys(test_data)

しかし外部ファイルから呼び出すときはエラーしない

これはエラーしない

with open("外部データファイル", "r", encoding="utf-8") as f:
    reader = csv.DictReader(f, delimiter=",")
    for line in reader:
        elements = driver.find_element(By.XPATH, "//input[@name='file'][@type='file']")
        elements.send_keys(line["test_data"]) #変数の中身→C:\Users\ユーザー名\Desktop\ファイル名

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