今回はテストツールSleniumでWEBに用意したフォームにデータ入力していきたいと思います。
まずSleniumをダウンロードします。Sleniumは役割ごとにSleniumRCとかSleniumIDEとかいろいろ分かれていて最初は何をダウンロードしていいか分からず難しいですね。
今はRCとかIDEは使わず、Selenium WebDriverが最新みたいですが、Slenium2と言ったほうが分かりやすい気がします。
私はPHPでテストを書きたかったので、Sleniumクライアントは今もメンテが続いているfacebook/php-webdriverを使うことにしました。
インストールはcompserを使うのがいいです。
| 
					 1 2 3 4 5  | 
						{ 	"require": { 		"facebook/webdriver": "~1.0" 	} }  | 
					
というcomposer.jsonを作って、
| 
					 1  | 
						composer install  | 
					
を実行すれば必要なファイルがダウンロードされます。composerがない場合は
| 
					 1  | 
						curl -sS https://getcomposer.org/installer | php  | 
					
で取得してください。
sleniumのローカルサーバーも立ち上げておきましょうね、http://selenium-release.storage.googleapis.com/index.htmlから最新版のselenium-server-standalone-x.xx.x.jarファイルをダウンロードして起動しておきます。
| 
					 1  | 
						java -jar selenium-server-standalone-2.47.1.jar  | 
					
と打てば起動しますので、テスト中は立ち上げっぱなしにしといてください。
ではPHPでテストを書きます。
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21  | 
						<?php namespace Facebook\WebDriver; use Facebook\WebDriver\Remote\DesiredCapabilities; use Facebook\WebDriver\Remote\RemoteWebDriver; require_once('vendor/autoload.php'); // start Firefox with 5 second timeout $host = 'http://localhost:4444/wd/hub'; // this is the default $capabilities = DesiredCapabilities::firefox(); $driver = RemoteWebDriver::create($host, $capabilities, 5000); // navigate to 'https://google.co.jp' $driver->get('https://google.co.jp'); // input form $driver->findElement(WebDriverBy::id('q') )->sendKeys('ばけらった')->submit(); // close the Firefox $driver->quit();  | 
					
firefoxが立ち上がってgoogle検索されます。
ではURLを自分のWEBフォームに変えて、データをCSVから呼び出し繰り返し実行するようにします。
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47  | 
						<?php // An example of using php-webdriver. namespace Facebook\WebDriver; use Facebook\WebDriver\Remote\DesiredCapabilities; use Facebook\WebDriver\Remote\RemoteWebDriver; require_once('vendor/autoload.php'); // start Firefox with 5 second timeout $host = 'http://localhost:4444/wd/hub'; // this is the default $capabilities = DesiredCapabilities::firefox(); $driver = RemoteWebDriver::create($host, $capabilities, 5000); ini_set('auto_detect_line_endings',TRUE); $handle = fopen('./talent2.csv','r'); while ( ($data = fgetcsv($handle) ) !== FALSE ) {  var_dump($data);  $id = $data[0];  $name = $data[1];  $kana = $data[2];  $birthday = str_replace('/', '-', $data[3]);  $gender = $data[4];  $country = $data[5];  $size = $data[6];  $activity = $data[7];  $url = $data[8];  $image = $data[9];  // navigate to 'http://example.jp/form/add.php'  $driver->get('http://example.jp/form/add.php'); // input form  $driver->findElement(WebDriverBy::id('form_name') )->sendKeys($name);  $driver->findElement(WebDriverBy::id('form_birthday') )->sendKeys($birthday);  $driver->findElement(WebDriverBy::id('form_country') )->sendKeys($country);  $driver->findElement(WebDriverBy::xpath('//input[@type="file"]') )  ->sendKeys('/Users/utsunomiyakazuya/MyWorks/slenium/img/'.$image.'.jpg');  $driver->findElement(WebDriverBy::id('form_appearances') )->sendKeys($activity)  ->submit(); } ini_set('auto_detect_line_endings',FALSE); // close the Firefox $driver->quit();  | 
					
私の環境はMacなのでCSV読み込みで文字化けしたため事前にutf-8にCSVを変換しました。さらに改行が読み込まれなかったのでauto_detect_line_endingsをtrueにしていますが必要ない場合もあるでしょう。
| 
					 1 2  | 
						$handle = fopen('./data.csv','r'); while ( ($data = fgetcsv($handle) ) !== FALSE ) {  | 
					
でcsvファイルを読み込んでいます。得られたデータを次々にフォームに入れていきます。
| 
					 1 2  | 
						  $driver->findElement(WebDriverBy::xpath('//input[@type="file"]') ) ->sendKeys('/Users/utsunomiyakazuya/MyWorks/OscarChildren/slenium2/img/'.$image.'.jpg');  | 
					
こんな感じでファイル名からファイルアップロードもできます。
いけましたか?たぶん、最低限これだけでいけると思うのですが、いけてなかったら教えて下さい。さくさくデータが自動入力されるのを見ると感動的ですよ。
それでは充実したテストライフを!

