ボクが知っているこれまでのサイトの正常性確認方法と今回の課題
確認方法
- 何らかの方法で Web ページの HTML を取得して HTML 内の特定の文字列を grep で検索してチェック
- あらかじめ、特定の文字列を返す HTML を作ってもらって、何らかの方法でその HTML にアクセスして文字列をチェック
大体の事はこれで事足りると思っていた。
今回の課題
- ログインした先のページも確認したい
- ついでにページのキャプチャも取得したい
ということで、PhantomJS というツールを利用することにした
参考
俺のアプリケーション
以前に Sinatra で作ったアプリケーションを利用する。
トップページで、ユーザー名とパスワードを入力する。
ログイン後。
サンプル HTML
index.erb(トップページ)
<html> <head> <meta charset="UTF-8"> </head> <body> <h1>OrenoApp Login</h1> <form action="login" id="login_form" method="POST" class="login_form" /> <div> Username :<input type="text" id="username" name="username" value="" /> </div> <div> Password :<input type="password" id="password" name="password" value="" /> </div> <div> <!--<input type="submit" name="submit" value="Login" /> PhantomJS でエラーになる--> <!--<input type="submit" name="LoginButton" value="Login" /> 動作する--> <button type="submit">Login</button> <!-- 動作する --> </div> </form> </body> </html>
ちなみに…
<input type="submit" name="submit" value="Login" />
としておくと、PhantomJS でチェックした場合に以下のようなエラーとなる。
TypeError: HTMLInputElement is not a constructor (evaluating 'form[i].submit()') undefined:5 :8
name
属性を submit
としていることが原因。
main.erb(ログイン後のページ)
<html> <head> <meta charset="UTF-8"> </head> <body> <h1>ようこそ</h1> <div class="username"> <%=@username%> さん </div> <hr> <div> <a href="/logout">ログアウト</a> </div> </body> </html>
サンプル PhantomJS スクリプト
以下のようなスクリプトを作ってみた。
ログイン処理の処理は 27 行目から 55 行目くらいまで。ただ、ログイン処理部分はサイトによって試行錯誤が必要となる。
チェック
PhantomJS のバージョンを確認
$ phantomjs --version
2.1.1
チェック
$ phantomjs check.js ${Web サイトのユーザー名} ${Web サイトのパスワード} チェック開始. チェック完了.
ログインが成功してログイン後のキャプチャが取得されている。
$ ls check.png
check.png
単純にキャプチャを取得するわけではなく、ページ内の HTML にユーザー名が含まれている場合のみ画面のキャプチャを取得している。
ログイン後のキャプチャ画面
透過しちゃってて解りづらいけど…
おけ、おけ。
以上
PhantomJS を使えば、より詳細に一歩踏み込んだ Web サイトの稼働確認が出来ると思う。