情シスは何度でも甦るさ。

VBA!VBA!

Selenium と OpenScript をエンタープライズなERPシステムに使ってみた結果

Web自動テストシリーズ
使ってみたというか、絶賛現在進行形。

Granditを導入することになった。

この度、自社でGranditというWebのERPパッケージを導入することになった。
なかなかヘビーなパッケージなのだが、国産ERPなので、日本人好みに作られており、会計周りの機能や画面遷移などもユーザーフレンドリー。
また、明らかにメインフレームのユーザーを対象としている。Webなのに、エンター押したら項目遷移するとか、ファンクションキーにショートカット割り当てるとか。
メインフレームを使っていたユーザー部門の担当者からは操作性の面で大きな評価を得ている。

Webシステムとしては微妙なんだぜ

ただ、これがWebシステムとして見るとなかなかの曲者。

  • Microsoftの技術にめちゃくちゃロックオン
  • IEでしか動かない
  • しかも、IE5 quirksモード(互換モード)
  • Microsoft Edge?なにそれ?
  • 内部は、C# .net framework
  • JavascriptVBscriptがいっぱい。input要素になんかしたら裏で何かが動きまくる。
  • 画面遷移が新規ウィンドウをどんどん開いていく構成(上のウィンドウがあると、下のウィンドウは操作できない)
  • 文字が小さい。拡大できない。
  • ウィンドウサイズが固定。PCの解像度によっては、微妙に下が切れる・・・。(これは最新版では解消するとか?)
  • 右クリックとかできない。

ユーザーに変なことさせない仕組みがモリモリ。
Webシステムでありながら、クラサバのような操作感を出すためにかなり無理してる。

Selenium Webdriverを試してみた

業務ルールモリモリの画面とかあるので、Seleniumで自動テスト作っとくと楽できるっぽい感じがあったので、試しに使ってみることに。
ただ、簡単にhtmlが見れないので、画面で、[CTRL]+Pで、tempフォルダに吐かしたhtmlを見るなど最初から難航。
普通の方法でHTMLソースが得られないときに、HTMLソースを取り出す奥の手

でもって、やってみるとNoSuchFrameExceptionとか NoSuchElementExceptionとかが連発。

これは難敵だなぁ。と、思って、検証した結果

  1. メニュー押したら新規ウィンドウ開くはずなのに開いてなかった => window_handlesの数が増えてるかを確認して増えてなかったらリトライする
  2. 新規ウィンドウ移動時にwindow_handleが取得できてないのでエラる => window_handleの取得をリトライさせる。(1とこんがらがって大変)
  3. 新規ウィンドウ開いたときに、フォーカスが当たって子フレームにいるから、再度子フレームに行こうとしてエラる => 最初に親フレームに移動してから子フレームに
  4. テキストボックスにうまく値が入らない => 明示的にフォーカスさせて、かつwaitかける
  5. テキストボックスをblurした時に処理が走るようで、次の項目に値がうまく入らない => blur後にwait入れる
  6. 半角カナが入力できません! => forkして半角カナ入れれるようにしてる人がいたので、そちらで対応 Selenium WebDriver - SendKeys で半角カナを入力する

などなどと、ゴリゴリプログラムを書いて制御することが必要に、でも、まだたまにこける・・・。

Oracle OpenScriptならどーなの?

そこで登場、Oracle OpenScript。久々に触ります。
気づけば、バージョンも 12.5.0.2.0にまで上がってるんだぜ!
Oracle Application Testing Suite Downloads(評価版)

一番上の、『Oracle Application Testing Suite 12.5.0.2.0』 だと、負荷テストツールとか、テスト管理ツールとかついてくるから、一つ下の『OpenScript for Windows Install (439MB) 』を選択しましょう。

さすがに高いだけはある。

一発で動作完了! IEを完全にエミュレートしてるから、ノーエラー。
iframeがどうとか、input要素がどうとか全く気にしなくていい。爽快。

が、しかし、今の会社ではライセンスないから、実戦投入はできません・・・。

マスタ登録やマニュアル作成にも使える

今回、複雑な処理のところはテストツールで自動テストを流すのですが、システムの移行もあるので、移行時のマスタ登録なんかにも使おうとしてます。
DBにダイレクトに挿入すると、画面のエラーチェックとかかかんないので、不整なデータが入り混む可能性もあるので。
前に書いたcsvデータを画面登録していくやつですね。OpenScriptでいうところのデータバンク
ryoben.hateblo.jp

あとは、マニュアルを作成するのですが、その際の画面のスクリーンショットの取得。Selenium WebdriverもOpenScriptもどちらもその機能があるので、リアルにデータを入力している画面のスクリーンショットを取得して、マニュアルに使おうかと考えています。
これだけで、だいぶ工数持ってかれるもんね。

さてさて、無事活躍できるのでしょうか。はたまたエラーでまくって、内緒でOpenScript使ってたりして。

Webテストについては、こんな記事もあるよ