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(セレネーゼ)と呼ぶそうです。

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

必要なもの

xvfb

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

$ sudo apt install xvfbCode language: Bash (bash)

説明

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_helperCode language: Bash (bash)

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

$ ./download_linux.shCode language: Bash (bash)

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

$ cp ~/.bashrc ~/.bashrc.bakCode language: Bash (bash)

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

$ echo export PATH="$(pwd):\$PATH"
export PATH=/home/jenkins/selenese_run_helper:$PATHCode language: Bash (bash)

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

export PATH=/home/jenkins/selenese_run_helper:$PATHCode language: Bash (bash)

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

$ which selenium_server_start.sh
/home/xxxx/selenese_run_helper/selenium_server_start.shCode language: Bash (bash)

(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 4444Code language: Bash (bash)

(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
Code language: Bash (bash)

使い方

テスト対象の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
Code language: Bash (bash)

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

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

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

使い方の例

jpostal_json/test_and_push.sh at master · 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 $errcntCode language: Bash (bash)

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

selenium_server_start.sh
selenese_run.sh selenese/smoke_local.html
selenium_server_stop.shCode language: Bash (bash)
jpostal_json/selenese/smoke_local.html at master · 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>Code language: Bash (bash)
タイトルとURLをコピーしました