Selenium GridでWEBページを複数のブラウザ上で同時テスト

こんにちは。

引き続き、Seleniumを使ってのテストです。

前回はSelenium IDEを用いいて、一つのマシンと一つのブラウザで、テストケースの実行を行いました。 今回は命令を実行するサーバーと、実際にブラウザを起動してテストをするクライアントを分けてテスト出来るようにします。イメージはこんな感じです。

[Controller]━ [SERVER(hub)] ┳[Client(node)]
┣[Client(node)]
┣[Client(node)]
┣[Client(node)]
・・・

各種ブラウザに対応していて、同時に異なるブラウザを起動して並行したテストを行うことも出来ますが、今回のテストはサーバーマシンをLinux、ノードをWindows上のGoogle Chromeで行います。

図にはコントローラーがありますが、サーバーマシン上で命令を実行してもOKです。

8

[サーバーの準備]

まずは、ダウンロードのページから Selenium Standalone Serverをダウンロードします。サイトから最新版のURLを取得してください。

#作業ディレクトリに移動します
cd [作業ディレクトリ]

#Selenium Standalone Serverをダウンロードします。
wget http://goo.gl/PJUZfa #ダウンロードURL

#サーバーをhubモードで起動します。
java -jar selenium-server-standalone-2.48.2.jar -role hub
 

起動したらクライアントのWindowsからコンソールウェブページを確認します。

http://サーバーのIPアドレス/grid/console

筆者の環境ですとhttp://192.168.133.128:4444/grid/console になります。

[ノードの準備]

次にノード(Windows)でもSelenium Standalone Serverをダウンロードします。

さらに、今回はChromeでのテストを行うので、chromeのwebdriverをダウンロードしてSelenium Standalone Serverと同じ場所に置きます。

9

webdriverはseleniumのダウンロードページの、少し下に行ったところにあります。

さらにさらに、コマンドプロンプトで実行するとパスを指定するのが面倒なのでバッチファイルを同じ場所に置きます。内容はこのような感じで。

#test.bat
#chromeのドライバをオプションで追加して、ノードモードで実行します。

java -jar selenium-server-standalone-2.48.2.jar -role node -hub http://192.168.133.128:4444/grid/register -Dwebdriver.chrome.driver=chromedriver.exe
 
11 作業ディレクトリ内のファイルはこうなります。

10

実行して問題がなければ、サーバーのコンソール上にノードが追加されます。

あとは命令を実行するだけです!

命令する言語はjava,C#,Ruby,Python,Nodeと色々選べます。 今回はnodeで実行してみます。
var webdriver = require('selenium-webdriver'),
    By = require('selenium-webdriver').By,
    until = require('selenium-webdriver').until;

var driver = new webdriver.Builder()
    .forBrowser('chrome')
    .usingServer('http://192.168.133.128:4444/wd/hub')
    .build();

driver.get('http://www.google.com/ncr');
driver.findElement(By.name('q')).sendKeys('webdriver');
driver.findElement(By.name('btnG')).click();
driver.wait(until.titleIs('webdriver - Google Search'), 1000);
driver.quit();

ノード(windows)上でブラウザが自動で起動し、「webdriver」という文字で検索が行われれば成功です!

次回は、色々なスクリプト書いてみたり、複数ブラウザを同時テストしたりなどをやってみます。

ありがとうございました。