Selenium + groovy の動作環境が作りたかった (リベンジ)

# はじめに

簡単にSeleniumの動作する環境を作るリたかったのだが
結局　Eclipseをインストールしてしまったのでリベンジ

前回の記事
http://qiita.com/gluelan2013/items/fbd4bb5409fef5b23f15


## 考察
前回のログから、FireFoxが起動できていない　これは画面を見ていてもわかる

なのでFireFoxの起動を別に行ってテストスクリプトを実行してみる

ブラウザの実行は　SeleniumGrid に担当してもらう

## 設定

SeleniumGridの実行は　hub　と　nodeに分かれる
今回は　hub node テストスクリプト実行機　をすべて同じマシンで行う

カレントディレクトリに　selenium-server-standalone.jar および iedriver chromedriver を保存しておく

### hub
コマンドプロンプトからhubの起動

```
c:>java -jar selenium-server-standalone-2.45.0.jar -role hub
```
![101.png](https://qiita-image-store.s3.amazonaws.com/0/51335/8661d28f-3f14-5296-18c1-48825c9bae03.png)

しばらくすると、ノード確認のためのポーリングが始まります

ブラウザからアクセスして　起動を確認
![102.png](https://qiita-image-store.s3.amazonaws.com/0/51335/cf16cc1b-ec5c-70da-a018-b35879c8c410.png)


### node

node側の設定は　コマンドラインからもおこなえるが　jsonファイルに定義することもできるのでこれで設定する

```
{
	"capabilities" : [
		{
			"browserName": "firefox",
			"maxInstances": 2,
			"seleniumProtocol": "WebDriver"
		},
		{
			"browserName": "chrome",
			"maxInstances": 2,
			"seleniumProtocol": "WebDriver"
		},
		{
			"browserName": "internet explorer",
			"maxInstances": 2,
			"seleniumProtocol": "WebDriver"
		}
	]
	,
	"configuration":
	{
		"hub": "http://localhost:4444/grid/register"
	}
}
```

別のコマンドプロンプトから　この設定を引数に渡してnodeを起動

```
C:>java -jar selenium-server-standalone-2.45.0.jar -role node -nodeConfig node.json -Dwebdriver.ie.driver=./IEDriverServer.exe -Dwebdriver.chrome.driver=./chromedriver.exe
```
![103.png](https://qiita-image-store.s3.amazonaws.com/0/51335/964e8bb1-6c9b-9d01-c969-09f40d64c963.png)


ブラウザから　「default monitoring page : console」のテキストリンクからコンソールへ遷移し　登録されているノードを確認

![104.png](https://qiita-image-store.s3.amazonaws.com/0/51335/63c0e201-6095-5db7-6a4b-681724712002.png)

### テストスクリプト

テストスクリプト側は　firefoxを起動していたところを remorteDriverに切り替えて、capability設定で　ノードを指定するように変更します

```
import java.util.concurrent.TimeUnit
// import java.util.Date;
// import java.io.File;
// import org.openqa.selenium.support.ui.Select;
// import org.openqa.selenium.interactions.Actions;
// import org.openqa.selenium.firefox.FirefoxDriver;
// import org.openqa.selenium.*;
// import static org.openqa.selenium.OutputType.*;

import org.openqa.selenium.By
import org.openqa.selenium.Platform
import org.openqa.selenium.WebDriver
import org.openqa.selenium.remote.DesiredCapabilities
import org.openqa.selenium.remote.RemoteWebDriver



public class SeleniumBuilder {
    public static void main(String[] args) throws Exception {
//        FirefoxDriver wd;
//        wd = new FirefoxDriver();

DesiredCapabilities capability = new DesiredCapabilities();
capability.setBrowserName("firefox");
capability.setPlatform(Platform.VISTA);
WebDriver wd = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), capability);

        wd.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
        wd.get("http://www.yahoo.co.jp/");
        wd.findElement(By.id("srchtxt")).click();
        wd.findElement(By.id("srchtxt")).clear();
        wd.findElement(By.id("srchtxt")).sendKeys("selenium");
        wd.findElement(By.id("srchbtn")).click();
        wd.findElement(By.linkText("Selenium - Web Browser Automation")).click();
        wd.quit();
    }
/*    
    public static boolean isAlertPresent(FirefoxDriver wd) {
        try {
            wd.switchTo().alert();
            return true;
        } catch (NoAlertPresentException e) {
            return false;
        }
    }
*/
}
```

## テストスクリプト実行

別のコマンドプロンプトからテストスクリプトを実行する

```
c:>groovy gridselenium.groovy
```

ノード実行している　コマンドプロンプトに実行ログが表示される

```
11:03:29.614 INFO - Executing: [new session: Capabilities [{browserName=firefox}]])
11:03:29.637 INFO - Creating a new session for Capabilities [{browserName=firefox}]
11:03:41.471 INFO - Done: [new session: Capabilities [{browserName=firefox}]]
11:03:41.625 INFO - Executing: [implicitly wait: 60000])
11:03:41.704 INFO - Done: [implicitly wait: 60000]
11:03:41.715 INFO - Executing: [get: http://www.yahoo.co.jp/])
11:03:46.580 INFO - Done: [get: http://www.yahoo.co.jp/]
11:03:46.636 INFO - Executing: [find element: By.id: srchtxt])
11:03:47.291 INFO - Done: [find element: By.id: srchtxt]
11:03:47.369 INFO - Executing: [click: 0 [[FirefoxDriver: firefox on WINDOWS (9a2b5cae-a329-4b09-bcff-e1868c2c560e)] -> id: srchtx
t]])
11:03:48.089 INFO - Done: [click: 0 [[FirefoxDriver: firefox on WINDOWS (9a2b5cae-a329-4b09-bcff-e1868c2c560e)] -> id: srchtxt]]
11:03:48.104 INFO - Executing: [find element: By.id: srchtxt])
11:03:48.259 INFO - Done: [find element: By.id: srchtxt]
11:03:48.282 INFO - Executing: [clear: 0 [[FirefoxDriver: firefox on WINDOWS (9a2b5cae-a329-4b09-bcff-e1868c2c560e)] -> id: srchtx
t]])
11:03:48.415 INFO - Done: [clear: 0 [[FirefoxDriver: firefox on WINDOWS (9a2b5cae-a329-4b09-bcff-e1868c2c560e)] -> id: srchtxt]]
11:03:48.433 INFO - Executing: [find element: By.id: srchtxt])
11:03:48.496 INFO - Done: [find element: By.id: srchtxt]
11:03:48.512 INFO - Executing: [send keys: 0 [[FirefoxDriver: firefox on WINDOWS (9a2b5cae-a329-4b09-bcff-e1868c2c560e)] -> id: sr
chtxt], [selenium]])
11:03:48.692 INFO - Done: [send keys: 0 [[FirefoxDriver: firefox on WINDOWS (9a2b5cae-a329-4b09-bcff-e1868c2c560e)] -> id: srchtxt
], [selenium]]
11:03:48.708 INFO - Executing: [find element: By.id: srchbtn])
11:03:48.858 INFO - Done: [find element: By.id: srchbtn]
11:03:48.880 INFO - Executing: [click: 1 [[FirefoxDriver: firefox on WINDOWS (9a2b5cae-a329-4b09-bcff-e1868c2c560e)] -> id: srchbt
n]])
11:03:50.447 INFO - Done: [click: 1 [[FirefoxDriver: firefox on WINDOWS (9a2b5cae-a329-4b09-bcff-e1868c2c560e)] -> id: srchbtn]]
11:03:50.465 INFO - Executing: [find element: By.linkText: Selenium - Web Browser Automation])
11:03:50.810 INFO - Done: [find element: By.linkText: Selenium - Web Browser Automation]
11:03:50.819 INFO - Executing: [click: 2 [[FirefoxDriver: firefox on WINDOWS (9a2b5cae-a329-4b09-bcff-e1868c2c560e)] -> link text:
 Selenium - Web Browser Automation]])
11:03:51.976 INFO - Done: [click: 2 [[FirefoxDriver: firefox on WINDOWS (9a2b5cae-a329-4b09-bcff-e1868c2c560e)] -> link text: Sele
nium - Web Browser Automation]]
11:03:51.996 INFO - Executing: [delete session: be68ba47-ab0c-4f34-b2b9-22a6181cbe6f])
11:03:54.061 INFO - Command failed to close cleanly. Destroying forcefully (v2). org.openqa.selenium.os.UnixProcess$SeleniumWatchD
og@a3712f
11:04:23.609 INFO - Done: [delete session: be68ba47-ab0c-4f34-b2b9-22a6181cbe6f]
```

無事実行を確認

## 考察

テストスクリプトからfirefox起動を分離すれば起動できた。

で、そもそもfirefoxはなぜ起動しないのだろうか？

と、こういう場合どうやって解決すればよいのだろうか？？？


検索したら同じ問題を載せているものがあった
https://bobswift.atlassian.net/browse/GINT-86



# おわり？

この環境が簡単に構築できるものなのかといわれると・・・うーむ。
クロスブラウザも視野に入っているのであれば一手ではある気もするが・・・
リベンジできた感がない（吐血


>SeleniumサーバもDockerで。「Docker Selenium」レビュー
http://knowledge.sakura.ad.jp/tech/2631/

>Docker で Selenium Grid の環境構築をもっと楽に！
http://developer.cybozu.co.jp/tech/?p=8113

>Docker で Selenium Grid による並列実行環境を構築
http://qiita.com/akasakas/items/233f04a5c47d2075c262

>Docker on CoreOS on Virtualbox(Vagrant) で Selenium Grid Node を大量に作成して並列に囲まれてみたいと願った
http://gongo.hatenablog.com/entry/2013/12/23/220537

# ちなみに
SeleniumGrid環境で実行すると最後に下記が表示されます

![109.png](https://qiita-image-store.s3.amazonaws.com/0/51335/91621519-0c49-80b5-6e06-126036357cb8.png)

これもずっと前からでるけど原因不明なんだな～


# 参考

>Selenium 2 を導入する
http://www.ibm.com/developerworks/jp/web/library/wa-selenium2/