今回はテストツール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'); |
こんな感じでファイル名からファイルアップロードもできます。
いけましたか?たぶん、最低限これだけでいけると思うのですが、いけてなかったら教えて下さい。さくさくデータが自動入力されるのを見ると感動的ですよ。
それでは充実したテストライフを!