Selenium IDE 2.xに関する記事です
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(セレネーゼ)と呼ぶそうです。
必要なもの
xvfb
FireFoxをヘッドレスで起動するための仮想Xディスプレイバッファです。
$ sudo apt install xvfb
Code 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_helper
Code language: Bash (bash)
(2) ドライバやjarをダウンロードしてください。selenese-runner.jarのダウンロードに約10分、geckodriverのダウンロードに約1分かかりました。
$ ./download_linux.sh
Code language: Bash (bash)
(3) ~/selenese_run_helper をPATHに追加してください。ねんのために、~/.bashrc のコピーをとっておきます。
$ cp ~/.bashrc ~/.bashrc.bak
Code language: Bash (bash)
次のechoコマンドで表示された1行を ~/.bashrc に追加してください。
$ echo export PATH="$(pwd):\$PATH"
export PATH=/home/jenkins/selenese_run_helper:$PATH
Code language: Bash (bash)
この例では、次の1行を ~/.bashrc に追加してください。
export PATH=/home/jenkins/selenese_run_helper:$PATH
Code language: Bash (bash)
(4) ターミナルを閉じて、再度ターミナルを開いて、さきほどのPATH設定を適用してください。
$ which selenium_server_start.sh
/home/xxxx/selenese_run_helper/selenium_server_start.sh
Code 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 4444
Code 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 で、本ヘルパースクリプトを使っています。
#!/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
Code language: Bash (bash)
上のスクリプトの中ほどで、次のように呼んでいます。selenese/smoke_local.htmlがTest Suiteです。
selenium_server_start.sh
selenese_run.sh selenese/smoke_local.html
selenium_server_stop.sh
Code language: Bash (bash)
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)