皆さん、こんばんは。
今回は、ファイルダウンロード、アップロード、データ駆動型テストについてご紹介したいと思います
テストページは、テストページ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
◇インポート
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です。
□ダウンロード
ダウンロードを行いたいと思います。
テストページ04では、ダウンロードリンクを用意しています。
クリックすることで、画像をダウンロードすることができます。
ダウンロードリンクテキスト要素を取得し、クリックしましょう。
◇ダウンロードリンクの要素取得
「サンプル画像をダウンロード」を右クリック⇒検証を選択し、リンクテキストを取得します。
このリンクテキストは、「サンプル画像をダウンロード」であることが要素上でもわかります。
◇ダウンロードリンククリック
ダウンロードリンクをクリック操作を行い、ファイル保存を行います。
以下コードを記述し、実行します。#ダウンロードリンククリック
link = driver.find_element_by_link_text("サンプル画像をダウンロード").click()
time.sleep(3)
print("ダウンロードしました。")
time.sleep(1)
実行すると、以下ファイルがダウンロードされます。
(拡張子がjtifとなっていますがjpegとして使用できます。拡張子をjpgに変更も可能です。)
□アップロード
ダウンロードした画像をアップロードしましょう。
アップロードは、アップロードファイルを変数に指定し、その変数を「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)
実行すると、以下のようにダウンロードしたファイルがアップロードされました。
□データ駆動型テスト
続いて、データ駆動型テストを行っていきたいと思います。
データ駆動型(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インストール
上記公式の左上のコピーボタンを押すか、「pip install openpyxl」を記述します。
頭に「!」を付けて、実行します。!pip install openpyxl
私の場合、すでにインストールしていましたので、以下のように表示されました。
・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」であることを確認します。
・Excelのセル要素を取得
次にExcelの値を確認します。
A1、A2、A3にそれぞれテキストが入力されていることを確認します。
こちらの値を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です。
◇連続して入力する場合
最後に、複数の要素、Excelのテキストデータを入力する場合についてご紹介します。
こちらは、if文を応用したパターンとなります。
テストページ04の「ケースB」にあるテキストボックス01~05に、Excelファイルのシート「Test02」に記述されているテキストデータを上から順に入力していきます。
・「ケース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となります。
■最後に
今回は、Chrome driverを使用して、「ダウンロード」、「アップロード」、「データ駆動型テスト」についてご紹介いたしました。
次回もWeb操作について、ご紹介していきたいと思います。
最後まで見て頂き、ありがとうございました。
サイトトップへ
https://susakiworks.com/
Selenium実践入門 ――自動化による継続的なブラウザテスト WEB+DB PRESS plus