Selenium IDE Test Suite HTMLをFireFoxで実行するためのヘルパースクリプト

Selenium IDE 2.xに関する記事です

Selenium IDE 2.xのころのSelenese HTMLを今でもCIで動かすための記事です。

最新のSelenium IDEのファイルフォーマットはJSONで、標準のCommand line runnerがあります。

Selenium IDEは自動テストツールとしてはハードルが低いって本当?

最初のブラウザ操作を自動記録するのは簡単よ

何か難しいことがあるのかな?

自動記録されたものをベースに、アサーションコマンドを追加する必要があるの。

クリックしたリンクやボタンをどうやって記録しているの?

xpathやcssのことが多いわね。

ページデザインが変わって、xpathが変わったら?

テストは通らないわ。だから、ページデザインの変化が影響しないように、xpathを編集しないといけないの。

面倒なんだね。

Selenium IDE Test Suite HTMLとは

Selenium(セレニウム)は、Webサイトを自動テストするために、Webブラウザを自動操作するツール群です。

そのうちの Selenium IDE(アイディーイー)は、Google ChromeやFireFoxのプラグインです。Webブラウザを操作すると、その操作を自動記録して、あとで操作を再現できます。Webブラウザの操作は Selenium Commandとして記録されます。ファイルフォーマットはHTMLです。

Selenium Commandを呼び出しているのが、Test Case HTMLです。そして、複数のTest Case HTMLを呼び出しているのが、Test Suite HTMLです。

Selenium IDE Test Suite(テストスイート) HTML をJenkinsで実行するとき、つまりCLIで実行するのは、なかなか面倒です。

selenium-standalon-server.jarを起動したり、selenese-runner.jar を指定したり、FireFox用のSeleniumドライバ geckodriverを指定したり、ヘッドレスのための xvfb でFireFoxを起動したり。毎回、既存プロジェクトからコピペしていました。

そこで、Selenium IDE Test Suite HTMLをCLI実行するときの定形処理をスクリプトにまとめて、github公開しました。

Selenium Commandをselenese(セレネーゼ)と呼ぶそうです。

ninton/selenese_run_helper
Contribute to ninton/selenese_run_helper development by creating an account on GitHub.

必要なもの

xvfb

FireFoxをヘッドレスで起動するための仮想Xディスプレイバッファです。

$ sudo apt install xvfb

説明

download_linux.sh

Linux用のドライバやjarをダウンロードします。

  • selenium-server-standalone.jar
  • geckodriver
  • selenese-runner.jar

selenium_server_start.sh

selenium-standalone-server.jarをスタートします。

selenese_run.sh

Selenium IDE Test Suite HTMLをFireFoxでヘッドレス実行します。

selenium_server_stop.sh

selenium-standalone-server.jarをストップします。

初期設定

(1) git clone

$ cd ~ $ git clone git@github.com:ninton/selenese_run_helper.git $ cd selenese_run_helper

(2) ドライバやjarをダウンロードしてください。selenese-runner.jarのダウンロードに約10分、geckodriverのダウンロードに約1分かかりました。

$ ./download_linux.sh

(3) ~/selenese_run_helper をPATHに追加してください。ねんのために、~/.bashrc のコピーをとっておきます。

$ cp ~/.bashrc ~/.bashrc.bak

次のechoコマンドで表示された1行を ~/.bashrc に追加してください。

$ echo export PATH="$(pwd):\$PATH" export PATH=/home/jenkins/selenese_run_helper:$PATH

この例では、次の1行を ~/.bashrc に追加してください。

export PATH=/home/jenkins/selenese_run_helper:$PATH

(4) ターミナルを閉じて、再度ターミナルを開いて、さきほどのPATH設定を適用してください。

$ which selenium_server_start.sh /home/xxxx/selenese_run_helper/selenium_server_start.sh

(5) selenium_server_start.sh を実行してみましょう。

$ selenium_server_start.sh ++ dirname /home/xxxx/selenese_run_helper/selenium_server_start.sh ++ cd /home/xxxx/selenese_run_helper ++ pwd + SCRIPT_DIR=/home/xxxx/selenese_run_helper + selenium_server_standalone_jar=/home/xxxx/selenese_run_helper/selenium-server-standalone.jar + '[' '!' -f /home/xxxx/selenese_run_helper/selenium-server-standalone.jar ']' + pkill -f /home/xxxx/selenese_run_helper/selenium-server-standalone.jar + pgrep -f /home/xxxx/selenese_run_helper/selenium-server-standalone.jar + java -jar /home/xxxx/selenese_run_helper/selenium-server-standalone.jar 13916 + sleep 5 22:52:21.787 INFO [GridLauncherV3.parse] - Selenium server version: 3.141.59, revision: e82be7d358 22:52:21.871 INFO [GridLauncherV3.lambda$buildLaunchers$3] - Launching a standalone Selenium Server on port 4444 2020-04-05 22:52:21.907:INFO::main: Logging initialized @777ms to org.seleniumhq.jetty9.util.log.StdErrLog 22:52:22.081 INFO [WebDriverServlet.<init>] - Initialising WebDriverServlet 22:52:22.134 INFO [SeleniumServer.boot] - Selenium Server is up and running on port 4444

(6) selenium_server_stop.sh を実行してみましょう。

$ selenium_server_stop.sh +++ dirname /home/xxxx/selenese_run_helper/selenium_server_stop.sh ++ cd /home/xxxx/selenese_run_helper ++ pwd + SCRIPT_DIR=/home/xxxx/selenese_run_helper + selenium_server_standalone_jar=/home/xxxx/selenese_run_helper/selenium-server-standalone.jar + '[' '!' -f /home/xxxx/selenese_run_helper/selenium-server-standalone.jar ']' + pkill -f /home/xxxx/selenese_run_helper/selenium-server-standalone.jar + pgrep -f /home/xxxx/selenese_run_helper/selenium-server-standalone.jar 13916 + sleep 5

使い方

テスト対象のwebサイトはすでにあるものとします。

Selenium IDE Test Suite HTMLが selenese/testsuite_1.html にあるとします。

selenium_server_start.sh selenese_run.sh selenese/testsuite_1.html selenium_server_stop.sh

テスト結果は、./testResults/TEST-*/xml に保存されます。

ERRORがあるかどうかは、次のようなシェルスクリプトで判定できます。

errcnt=$(grep ./testResults/TEST-*.xml | wc --line) if [ $errcnt -eq 0 ]; then エラーがなかったとき else エラーだったとき fi

使い方の例

ninton/jpostal_json
jquery.jpostalのjsonpファイル作成スクリプト. Contribute to ninton/jpostal_json development by creating an account on GitHub.

jpostal_json の test_and_push.sh で、本ヘルパースクリプトを使っています。

#!/bin/bash -uex docker-compose --version xvfb-run --help ./bin/docker-compose_down.sh ./bin/docker-compose_up.sh selenium_server_start.sh selenese_run.sh selenese/smoke_local.html selenium_server_stop.sh ./bin/docker-compose_down.sh errcnt=$(grep ERROR testResults/TEST-smoke_local.xml | wc --line) echo errcnt=$errcnt if [ $errcnt -eq 0 ]; then ./bin/git_commit_jquery_jpostal_js.sh ./bin/git_push_jquery_jpostal_js.sh fi exit $errcnt

上のスクリプトの中ほどで、次のように呼んでいます。selenese/smoke_local.htmlがTest Suiteです。

selenium_server_start.sh selenese_run.sh selenese/smoke_local.html selenium_server_stop.sh
ninton/jpostal_json
jquery.jpostalのjsonpファイル作成スクリプト. Contribute to ninton/jpostal_json development by creating an account on GitHub.

Selenium IDE Test Suite HTMLです。ここから呼んでいるのは、jquery.jpostal.jsのSelenium IDE Test Case HTML群です。

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta content="text/html; charset=UTF-8" http-equiv="content-type" /> <title>Test Suite</title> </head> <body> <table id="suiteTable" cellpadding="1" cellspacing="1" border="1" class="selenium"><tbody> <tr><td><b>Test Suite</b></td></tr> <tr><td><a href="config_local.html">config_9080</a></td></tr> <tr><td><a href="../jquery.jpostal.js/selenium/smoketest/smoketest_1.html">smoketest_1</a></td></tr> <tr><td><a href="../jquery.jpostal.js/selenium/smoketest/smoketest_2.html">smoketest_2</a></td></tr> <tr><td><a href="../jquery.jpostal.js/selenium/smoketest/smoketest_3.html">smoketest_3</a></td></tr> <tr><td><a href="../jquery.jpostal.js/selenium/smoketest/smoketest_6.html">smoketest_6</a></td></tr> <tr><td><a href="../jquery.jpostal.js/selenium/smoketest/smoketest_7.html">smoketest_7</a></td></tr> <tr><td><a href="../jquery.jpostal.js/selenium/smoketest/smoketest_8.html">smoketest_8</a></td></tr> <tr><td><a href="../jquery.jpostal.js/selenium/ticket/ticket_004.html">ticket_004</a></td></tr> <tr><td><a href="../jquery.jpostal.js/selenium/ticket/ticket_008.html">ticket_008</a></td></tr> <tr><td><a href="../jquery.jpostal.js/selenium/ticket/ticket_009.html">ticket_009</a></td></tr> <tr><td><a href="../jquery.jpostal.js/selenium/smoketest/smoketest_1_b.html">smoketest_1_b</a></td></tr> </tbody></table> </body> </html>
タイトルとURLをコピーしました