背景
社内のシステム開発者向けにテスト自動化システムを構築・運用している。(SikuliX + Testablish)
その中で日常的に出てくる技術課題ややりたいことをメモ書き。
課題
TestablishはSelenium準拠のブラウザ操作向けアプリで、ブラウザ外操作のファイルアップロードやダウンロードは標準で対応できない。
一方、SikuliはOSSのRPAツールであり、人が画面を目で見てマウスを動かして実現できる操作は概ね再現できる。
そこで私の環境では、基本的にはTestablishでテストを作成し、不足するテスト操作についてはSikuliで補完する形で運用している。
全体を通してテスト自動化の工数はやはり重たいが、その中でもSikuliによるテスト自動化工数がネックと感じる。
ネックとなる要因
対象操作を1つずつ画像取得しながら記述する必要がある
実行環境が異なる場合はエラーとなりがちで、その場合は以下対応が必要となる
マッチング率を下げる(60%くらいがいいかも)
ExcelやEdgeなどのツールでバージョン違いによるデザイン差がある場合は実行環境で作り直す
対応
画像認識は便利だが、やはり環境差異による影響が大きく、なるべくならテストで使ってもらいたくない。
そこで1つの解決手段として、Sikuliのもう一つの認識機能である文字認識による操作を利用して、画像認識以外の経路を見出せないか、検証する。
目的
Testablish上で文字列を指定すれば、その文字列で対象要素を特定して操作(クリック)できるコマンドをSikuliで作成する。
内容
以下のような記述で目的を達成できた。
-----------------------
import sys
reload(sys)
#日本語を扱うため、utf_8指定
sys.setdefaultencoding("utf_8")
#日本語モードへ切り替え
tr = TextOCR.start()
tr.setLanguage("jpn")
#画面上から対象文字列のワードを探す
#strにはMatch型(座標データ)が返る
str = findText(u"対象文字列")
click(str)
-----------------------
あとは対象文字列をTestablishから引き渡せるようCommnad登録すればよい。
気付いた点
ものすごくレスポンスが遅い(Ryzen 9 3900X & 32GB memory)
複数ワード存在する場合は具合が悪い
文字列以外(リンクがアイコンになっているなど)だと画像認識になる
結論
一部のテスト操作では活用できるかも