読者です 読者をやめる 読者になる 読者になる

ボールを蹴りたいシステムエンジニア

ボール蹴りが大好きなシステムエンジニア、ボールを蹴る時間確保の為に時間がある時には勉強する。

fluentleniumを利用してみるので導入から実行まで整理

テスト自動化のツールfluentleniumを利用してみる。

環境はWindows7
fluentlenium利用の為、事前にGradleが導入済みです。


プロジェクト作成

$ cd /tmp/

$ mkdir /tmp/fluentlenium/

$ cd /tmp/fluentlenium/

$ gradle init
:wrapper
:init

BUILD SUCCESSFUL

Total time: 3.564 secs

依存関係解決の為、設定ファイルを修正

$ vi build.gradle

apply {
    plugin 'java'
    plugin 'idea'
    plugin 'eclipse'
}

repositories {
    mavenCentral()
}

dependencies {
    // AssertionのライブラリとしてFEST-Assertを利用
    testCompile 'org.fluentlenium:fluentlenium-festassert:0.9.1'

    // JUnitの場合、fluentlenium-coreを選択
    //testCompile 'org.fluentlenium:fluentlenium-core:0.9.1'
    testCompile 'junit:junit:4.11'
}

// testのディレクトリの配置が特殊なため
sourceSets {
    test {
        java {
            srcDir 'test'
        }
    }
}

test {
    // Gradleのtestタスク実行時に今回追加したファイルのみを対象とするように指定。
    include 'practicework_fluent/**'
}

eclipse用プロジェクト作成
依存ライブラリがダウンロードされる。
ここで標準出力をリダイレクトしてる理由としては、後の手順で依存ライブラリをgradleのキャッシュフォルダから取得する為です。

$ gradle eclipse > /tmp/gradle.eclipse.log

:eclipseJdt
:eclipseProject
:eclipse

BUILD SUCCESSFUL

Total time: 3 mins 0.035 secs

色々作成された

$ find
.
./.classpath
./.gradle
./.gradle/2.4
./.gradle/2.4/taskArtifacts
./.gradle/2.4/taskArtifacts/cache.properties
./.gradle/2.4/taskArtifacts/cache.properties.lock
./.gradle/2.4/taskArtifacts/fileHashes.bin
./.gradle/2.4/taskArtifacts/fileSnapshots.bin
./.gradle/2.4/taskArtifacts/outputFileStates.bin
./.gradle/2.4/taskArtifacts/taskArtifacts.bin
./.project
./.settings
./.settings/org.eclipse.jdt.core.prefs
./build.gradle
./gradle
./gradle/wrapper
./gradle/wrapper/gradle-wrapper.jar
./gradle/wrapper/gradle-wrapper.properties
./gradlew
./gradlew.bat
./settings.gradle

依存ライブラリは

C:\Users\ユーザー名\.gradle\caches\modules-2\files-2.1
以下にダウンロードされます

今回の依存ライブラリのみ取得

$ mkdir ./lib
$ cat /tmp/gradle.eclipse.log | grep Download |grep -v sources| awk -F / '{print $NF}' | while read jar; do cp -p /cygdrive/c/Users/ユーザー名/.gradle/caches/modules-2/files-2.1/*/*/*/*/$jar ./lib/; done 

sourcesてのはソースだから不要?って勝手な判断で不要としています。
(後で判明しましたがsourcesがある事で起動時エラー発生しました)
何でこんな事してるかというと、Eclipseでプロジェクト作成後、それを別環境へ持っていく際にライブラリがgradleのキャッシュディレクトリにあって移動が面倒くささったので。
その辺もgradleでやる方法あるかと思うのですが、スイマセン勉強不足です。


eclipseでインポート-既存プロジェクトのインポート
作成したプロジェクト
C:\cygwin\tmp\fluentlenium
をインポート
ワークスペースにコピーしたいのであれば、
「プロジェクトをワークスペースにコピー」にチェックをつける

Javaのソースフォルダが無かったので
新規-新規ソースフォルダ「src」を作成、

適当なJavaクラス作成
yahooのTOPページに飛んで、「Fluentlenium 使い方」って検索する
fluentlenium.FluentleniumTest

package fluentlenium;

import org.fluentlenium.adapter.FluentTest;
import org.junit.Test;

public class FluentleniumTest extends FluentTest  {

    @Test
    public void test() {
        goTo("http://www.yahoo.co.jp/");
        fill("#srchtxt").with("Fluentlenium 使い方");
        click("#srchbtn");
    }
}


実行したらエラーでた

org.openqa.selenium.firefox.NotConnectedException: Unable to connect to host 127.0.0.1 on port 7055 after 45000 ms. Firefox console output:

下記の参考ページによると、WebDriverのバージョンがFirefoxのバージョンに対応していない場合に上記のエラーが出るとのこと。
selenium-webdriver - Selenium WebDriver "Unable to connect to host" エラー - Qiita


と思いきや
SeleniumのJarのバージョンをアップデートするだけで大丈夫らしい。
kakakikikekeのブログ: Failed to connect to binary FirefoxBinary


元々ビルドパスに通っていたライブラリ
selenium-java-2.35.0.jar
selenium-java-2.35.0-sources.jar
selenium-firefox-driver-2.35.0.jar
selenium-firefox-driver-2.35.0-sources.jar
をビルドパスから除外

ここから
http://www.seleniumhq.org/download/

Selenium Standalone Server
Selenium Client & WebDriver Language Bindings(Java版)
の最新版をダウンロード

新たにプロジェクト配下にソースフォルダ「lib」を作成して
ダウンロードした
selenium-java-2.46.0-srcs.jar
selenium-java-2.46.0.jar
selenium-server-standalone-2.46.0.jar
を配置しビルドパスに追加設定を行う。
注意点として、ビルドパス追加後は
ビルドパスの構成-順序およびエクスポートで追加したjarファイルの順序を上に持ってくる事。
そうしないと、NoMethodエラーが発生しました。

この設定で無事起動成功!

実行すると、
YahooのTOPページが表示されて「Fluentlenium 使い方」で検索結果ページへ移動した

すげー

参考
FluentLeniumの紹介について — grimrose's tech log
FluentLeniumでJavaのSeleniumスクリプトをシンプルに – 前編 | 品質向上ブログ