環境とか前提とか
- Virtualbox上のDebian8(jessie)
- BehatはComposerでインストール(3.x@stable)
- Chrome バージョン 40.0.2214.115 (64-bit)
- Firefox(Iceweasel) バージョン 38.3.0
- Windows10 + InternetExplorer 11
- Windows10 + Edge 25
Behatのインストール
Composerでインストールします
$ cd ~/
$ mkdir behat
$ cd behat
$ curl -sS https://getcomposer.org/installer | php
$ php composer.phar init -n
$ php composer.phar config bin-dir "bin/"
$ vim composer.json
{
"require-dev": {
"behat/behat": "3.*@stable",
"behat/mink": "1.*@stable",
"behat/mink-extension": "*",
"behat/mink-goutte-driver": "*",
"behat/mink-sahi-driver": "*",
"behat/mink-selenium2-driver": "*",
"behat/mink-zombie-driver": "*"
},
"config": {
"bin-dir": "bin/"
}
}
$ php composer.phar install
Selenium Webdriverをダウンロード
ここから、最新版を落としてきます
$ cd ~/bin/
$ wget http://selenium-release.storage.googleapis.com/2.48/selenium-server-standalone-2.48.2.jar
chromedriverをダウンロード
Chromeのバージョンによって、ダウンロードするchromedriverのバージョンが違います(これでそこそこハマった)
このへんからダウンロード出来るかも。
各ディレクトリのnotes.txtに、Supports Chrome v40-43
みたいに書かれてるので、これを見て自身の環境のChromeバージョンに合わせてダウンロードします
$ cd /usr/local/lib/
$ sudo wget http://chromedriver.storage.googleapis.com/2.15/chromedriver_linux64.zip
$ sudo unzip ./chromedriver_linux64.zip
// Seleniumから権限エラーになるので実行権限をつけておく
$ sudo chmod +x ./chromedriver
Seleniumの起動方法
java -jar
で起動(javaコマンドが無い場合は、sudo apt-cache search openjdk
で最新版を)
$ cd ~/bin/
$ java -jar selenium-server-standalone-2.48.2.jar -Dwebdriver.chrome.driver=/usr/local/lib/chromedriver
Behat 初期化
$ cd ~/behat
// 初期化
$ ./bin/behat --init
+d features - place your *.feature files here
+d features/bootstrap - place your context classes here
+f features/bootstrap/FeatureContext.php - place your definitions, transformations and hooks here
behat.yml編集
設定ファイルのサンプルからbehat.ymlを編集
$ cp ./vendor/behat/mink-extension/behat.yml.dist ./behat.yml
$ vim behat.yml
# Firefox設定(デフォルト)
default:
suites:
default:
path: %paths.base%/features
contexts: [FeatureContext,Behat\MinkExtension\Context\MinkContext] # FeatureContext,を追加
extensions:
Behat\MinkExtension:
browser_name: firefox
base_url: http://google.co.jp/ # ここはとりあえずGoogle
sessions:
default:
selenium2:
capabilities: {"browser":"firefox","version":"*"}
# Chrome設定
chrome-via-webdriver:
extensions:
Behat\MinkExtension:
browser_name: chrome
base_url: http://google.co.jp/ # ここはとりあえずGoogle
sessions:
default:
selenium2:
capabilities: {"browser":"chrome","version":"*"}
contextsに、FeatureContext,
を追加した事により、feature/bootstrap/FeatureContext.php
がBehat実行時に有効になります
「待つ」追加
Behatでおあずけが出来ます
$ vim feature/bootstrap/FeatureContext.php
class FeatureContext implements Context, SnippetAcceptingContext
{
(中略)
// ↓追加
/**
* @When :time 秒待つ
*
* @param string $time
*/
public function wait($time)
{
sleep($time);
}
}
テストを書いてみる
テストは、featureディレクトリの中に、.feature
拡張子を付けて配置します
$ vim feature/test.feature
# language: ja
#
フィーチャ: グーグルで検索
@javascript
シナリオ: 7meを検索
前提 ホームページを表示している
かつ 3 秒待つ
もし "q" フィールドに "7me" と入力する
かつ "btnG" ボタンをクリックする
かつ 2 秒待つ
ならば "7me.oji.0j0.jp" と表示されていること
テスト実行
--profile
オプションで、behat.yml
のどの設定を適用するか指定出来るようです
$ ./bin/behat --profile=chrome-via-webdriver
フィーチャ: グーグルで検索
@javascript
シナリオ: 7meを検索 # features/test.feature:6
前提 ホームページを表示している # Behat\MinkExtension\Context\MinkContext::iAmOnHomepage()
かつ 3 秒待つ # FeatureContext::wait()
もし "q" フィールドに "7me" と入力する # Behat\MinkExtension\Context\MinkContext::fillField()
かつ "btnG" ボタンをクリックする # Behat\MinkExtension\Context\MinkContext::pressButton()
かつ 2 秒待つ # FeatureContext::wait()
ならば "7me.oji.0j0.jp" と表示されていること # Behat\MinkExtension\Context\MinkContext::assertPageContainsText()
1 scenario (1 passed)
6 steps (6 passed)
0m8.88s (11.96Mb)
なお、Firefoxの場合はbtnGではなくbtnKになる模様(2015-10-28 現在)
IE driverを入れる(2015-12-18 18:25:07追記)
Selenium公式でリンクされてるIEDriverServer.exe
をDLして、起動オプションで指定。
-Dwebdriver.ie.driver=/path/to/IEDriverServer.exe
あと、[WebDriver\Exception\NoSuchWindow]
が出てUnable to get browser
が表示される場合は、インターネットオプションの[セキュリティ]タブで、全てのゾーンの保護設定を同じにする
behat.yml(IE)
ie-via-webdriver:
extensions:
Behat\MinkExtension:
browser_name: internet explorer
base_url: http://google.co.jp/
sessions:
default:
selenium2:
capabilities: {"browser":"internet explorer","version":"*"}
Edge driverを入れたかった(2015-12-18 18:25:07追記)
Microsoft Webdriverを入れて、起動時に、
-Dwebdriver.edge.driver=/path/to/MicrosoftWebDriver.exe
を指定してあげるだけらしいけど、僕の環境だと動かなかった(以下エラーのコピペ)
@javascript
シナリオ: てすと # features\test.feature:6
前提 ブラウザを 960 x 800 にリサイズ # FeatureContext::browserResize()
Could not open connection: null (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 1.62 seconds
Build info: version: '2.47.1', revision: '411b314', time: '2015-07-30 03:03:16'
System info: host: 'hogePC', ip: '192.168.24.6', os.name: 'Windows 8.1', os.arch: 'amd64', os.version: '6.3', java.version: '1.8.0_20'
Driver info: org.openqa.selenium.edge.EdgeDriver (Behat\Mink\Exception\DriverException)
│
╳ Could not open connection: null (WARNING: The server did not provide any stacktrace information)
╳ Command duration or timeout: 6.72 seconds
╳ Build info: version: '2.47.1', revision: '411b314', time: '2015-07-30 03:03:16'
╳ System info: host: 'hogePC', ip: '192.168.24.6', os.name: 'Windows 8.1', os.arch: 'amd64', os.version: '6.3', java.version: '1.8.0_20'
╳ Driver info: org.openqa.selenium.edge.EdgeDriver (Behat\Mink\Exception\DriverException)
│
└─ @AfterStep # Sanpi\Behatch\Context\DebugContext::failScreenshots
どうも調べていると、Microsoft Webdriverがまだ不完全みたいな雰囲気があったので、今は温めておくことにした
behat.yml(Edge)
edge-via-webdriver:
extensions:
Behat\MinkExtension:
browser_name: MicrosoftEdge
base_url: http://google.co.jp/
sessions:
default:
selenium2:
capabilities: {"browser":"MicrosoftEdge","version":"*"}