Jupyterlab_web_win_chrome03_title

【テスト自動化】Python selenium(ダウンロード、アップロード、データ駆動型テスト[ExcelData])

皆さん、こんばんは。
今回は、ファイルダウンロード、アップロード、データ駆動型テストについてご紹介したいと思います
テストページは、テストページ04を使用して、ご紹介していきたいと思います。

・テストページ
https://susakiworks.com/wp-content/uploads/2021/04/Test_page04.html

また、今回も前回と引き続き、Chrome Driverを使用して各自動化の操作をご紹介していきたいと思います。

■記事内リンク

事前準備
ダウンロード
アップロード
データ駆動型テスト

□事前準備

◇ipynbファイル作成

Anacondaを起動後、JupyterLabを選択しましょう。
JupyterLab起動後、画面左上のメニュー「File」⇒「New」⇒「Notebook」を選択します。
Select Kernelで「Python 3」を選択し、作成したipynbファイルのタブを右クリック後、
Rename Fileを選択し、ファイル名を設定します。
今回以下のようにファイル名を設定しました。
Jupyterlab_Web_operation_Chrome03.ipynb
Jupyterlab_web_win_chrome03_01

◇インポート

selenium、webdriver、timeをインポートしましょう。
以下を入力しインポートします。
#インポート
import selenium
from selenium import webdriver
import time
print("準備:inport OK")
time.sleep(3)

◇driver起動

Chrome Driverを起動しましょう。
前回と同様に以下を記述します。
#Chrome Driver設定
driver=webdriver.Chrome(executable_path="C:\\Users\\sinsu\\WebDrivers\\ChromeDriver\\Ver89\\chromedriver.exe")
time.sleep(3)
driver.maximize_window()
time.sleep(3)

print("Chrome Driver OK")
time.sleep(1)

◇テストページ03へ移動

以下を記述しテストページに遷移します。

#テストページ04遷移
driver.get('https://susakiworks.com/wp-content/uploads/2021/04/Test_page04.html')
time.sleep(3)

print("サイトページに遷移しました。")
time.sleep(1)

テストページ04へ遷移できればOKです。
Jupyterlab_web_win_chrome03_02

 

□ダウンロード

ダウンロードを行いたいと思います。
テストページ04では、ダウンロードリンクを用意しています。
クリックすることで、画像をダウンロードすることができます。
ダウンロードリンクテキスト要素を取得し、クリックしましょう。
Jupyterlab_web_win_chrome03_03

◇ダウンロードリンクの要素取得

「サンプル画像をダウンロード」を右クリック⇒検証を選択し、リンクテキストを取得します。
このリンクテキストは、「サンプル画像をダウンロード」であることが要素上でもわかります。
Jupyterlab_web_win_chrome03_04

◇ダウンロードリンククリック

ダウンロードリンクをクリック操作を行い、ファイル保存を行います。
以下コードを記述し、実行します。
#ダウンロードリンククリック
link = driver.find_element_by_link_text("サンプル画像をダウンロード").click()
time.sleep(3)

print("ダウンロードしました。")
time.sleep(1)

実行すると、以下ファイルがダウンロードされます。
(拡張子がjtifとなっていますがjpegとして使用できます。拡張子をjpgに変更も可能です。)
Jupyterlab_web_win_chrome03_05

□アップロード

ダウンロードした画像をアップロードしましょう。
アップロードは、アップロードファイルを変数に指定し、その変数を「Send_keys」で送ります。

◇ファイルパス

先ほどダウンロードした画像ファイルのパスを確認します。
私の場合は、ダウンロードフォルダの直下となっています。
C:\Users\sinsu\Downloads\image.jfif

Jupyterlab側で認識できるように以下のように表記します。
C:\\Users\\sinsu\\Downloads\\image.jfif

◇ファイルをアップロード

・「ファイルを選択」リンクの要素取得

ファイルアップロードの「ファイルを選択」ボタンの要素を確認します。
今回は検証⇒「Copy」⇒「Copy selector」を選択し、要素を確認します。
要素は以下であることを確認できました。
「body > input[type=file]」

・ファイルアップロードの実行

ファイルアップロードを行います。
以下を記述し、アップロードを行います。
#画像アップロード
#ファイルを指定
upload="C:\\Users\\sinsu\\Downloads\\image.jfif"
time.sleep(3)

#ファイルを送りアップロード
driver.find_element_by_css_selector("body > input[type=file]").send_keys(upload)
time.sleep(3)

print("ファイルをアップロードしました。")
time.sleep(1)

実行すると、以下のようにダウンロードしたファイルがアップロードされました。
Jupyterlab_web_win_chrome03_06

□データ駆動型テスト

続いて、データ駆動型テストを行っていきたいと思います。
データ駆動型(Data Driven Test)は、簡単に言うとExcelファイル等に記述されているテキストデータ等を
Webページの要素へ入力するテストとなります。
テスト用に会員データを連続して作成したい、Excelの情報をWebページに大量に転記したいなど、様々なシーンで使用することができます。

◇Excelファイルの用意

今回は以下にExcelファイルを用意しました。
(Excelファイルリンク)
https://susakiworks.com/wp-content/uploads/2021/04/TestFile.xlsx

テストページ04の「ケースA」「ケースB」に入力用にテキストデータを設定しています。
自由に使っていただければと思います。

◇Excelファイルを読み込む準備

Excelファイルを読み込む場合、「openpyxl」を使用します。
以下公式サイトに利用方法等、記載されています。
https://pypi.org/project/openpyxl/

・openpyxlインストール

Jupyterlab_web_win_chrome03_07
上記公式の左上のコピーボタンを押すか、「pip install openpyxl」を記述します。
頭に「!」を付けて、実行します。
!pip install openpyxl
私の場合、すでにインストールしていましたので、以下のように表示されました。
Jupyterlab_web_win_chrome03_08

・openpyxlのインポート

インストール後は、以下を記述しインポートします。
#openpyxlインポート
import openpyxl
time.sleep(3)

print("openpyxlをインポートしました。")
time.sleep(1)

エラー等表示されず、インポートできればOKです。

◇Excelファイルの読み込み

Excelファイルを読み込みます。
Excelシートはダウンロードフォルダの直下に置き、ファイルパスは、以下ように表記しました。
C:\Users\\sinsu\\Downloads\\TestFile.xlsx

ファイルは「wb」と変数で指定し、シートも同様に指定します。
以下のように記述します。
wb=openpyxl.load_workbook('C:\\Users\\sinsu\\Downloads\\TestFile.xlsx', data_only=True)
sheet = wb['Test01']

Jupyterlabで実行した際の記述は以下となります。
#Excelファイルの読み込み
wb=openpyxl.load_workbook('C:\\Users\\sinsu\\Downloads\\TestFile.xlsx', data_only=True)
sheet = wb['Test01']
time.sleep(3)

print("Excelファイルを読み込みました。")
time.sleep(1)

エラー等表示されずに読み込めればOKです。

◇要素、セルを指定して入力

・テストページ04のテキストボックス要素の取得

「ケースA」のそれぞれのテキストボックスの要素を確認します。
右クリック⇒検証で、それぞれの要素を確認すると「nameA」「nameB」「nameC」であることを確認します。
Jupyterlab_web_win_chrome03_09

・Excelのセル要素を取得

次にExcelの値を確認します。
A1、A2、A3にそれぞれテキストが入力されていることを確認します。
Jupyterlab_web_win_chrome03_10

こちらの値をWebのテキストボックスに送る場合、「Send_keys」を使用します。
また、セルの値は、「row」「column」で取得します。
「row」は行、「column」は列となります。

・Excelの値をテキストボックスに入力

テストページ04の「テキストA」に、Excelの「Test01 」を入力する場合は、以下となります。
#ケースAの「テキストA」に入力

#テキストAの要素
input=driver.find_element_by_name('nameA')
time.sleep(1)

#ExcelのA1を入力
input.send_keys(sheet.cell(row=1, column=1).value)
time.sleep(1)

print("テキストを入力しました。")
time.sleep(1)

実行して確認しましょう。
以下のようにExcelのセル内容がテキストボックスに入力されていればOKです。
Jupyterlab_web_win_chrome03_11

◇連続して入力する場合

最後に、複数の要素、Excelのテキストデータを入力する場合についてご紹介します。
こちらは、if文を応用したパターンとなります。
テストページ04の「ケースB」にあるテキストボックス01~05に、Excelファイルのシート「Test02」に記述されているテキストデータを上から順に入力していきます。
Jupyterlab_web_win_chrome03_12

・「ケースB」のテキストボックス要素確認

まずケースBにあるテキスト01~テキスト05の要素を確認します。
右クリック⇒検証で要素部分を選択後、右クリック⇒copy⇒copy xpathで確認します。
以下のような要素であることを確認します。

ケースB テキスト01
//*[@id="file_name"]/p[4]/input

ケースB テキスト05
//*[@id="file_name"]/p[8]/input

 

・Excel「Test02」シート読み込み

次にExcelファイルの「Test02」シートを読み込みます。
「Test01」と同様に、以下のように記述します。
#ケースBの入力準備
#Excelファイルの読み込み
wb=openpyxl.load_workbook('C:\\Users\\sinsu\\Downloads\\TestFile.xlsx', data_only=True)
sheet = wb['Test02']
time.sleep(3)

print("Excelファイルを読み込みました。")
time.sleep(1)

問題なく読み込めたらOKです。

 

・連続して入力

準備が整いましたので、連続して入力するコードを記述します。
こちらは、有志の方に協力してもらい、コードを作成致しました。
連続したテキストボックスであれば、応用して使用することができると思います。

#ケースBのテキストボックスに連続して入力

#レンジを5までとして、連続で入力し、値が無ければストップ
for i in range(0,5):
if sheet.cell(row=i+1, column=1).value==None:
break
#テストページ04のケースBの各テキストボックスに入力
input=driver.find_element_by_xpath('//*[@id="file_name"]/p['+str(4+i)+']/input')
input.send_keys(sheet.cell(row=i+1, column=1).value)

time.sleep(3)

print("連続して入力しました。")
time.sleep(1)

(解説)
「input=driver.find_element_by_xpath('//*[@id="file_name"]/p['+str(4+i)+']/input')」
上記のxpathの()部分に、(i+4)と表記しています。
こちらは、ケースB テキスト01の要素を確認した際に確認できるように、テキストボックスが4番目からとなっていますので、4番目から入力していく内容となります。

上記コードを実行し、以下のように連続して入力できればOKとなります。

Jupyterlab_web_win_chrome03_14

 

■最後に

今回は、Chrome driverを使用して、「ダウンロード」、「アップロード」、「データ駆動型テスト」についてご紹介いたしました。
次回もWeb操作について、ご紹介していきたいと思います。

最後まで見て頂き、ありがとうございました。

 

サイトトップへ
https://susakiworks.com/

Selenium実践入門 ――自動化による継続的なブラウザテスト WEB+DB PRESS plus
Selenium実践入門 ――自動化による継続的なブラウザテスト WEB+DB PRESS plus

テスト駆動開発
テスト駆動開発

この記事が気に入ったら
いいね ! しよう

Twitter で
Jupyterlab_web_win_chrome03_title
最新情報をチェックしよう!