記録したGUIテストを実行する場合、一般的にはマウスの正確な座標位置は重要ではなく、むしろマウスが目的のUIアイテムの内部でクリックされるかどうかが重要です。しかし、実際にはマウスの座標が必要なケースが発生します(例えば、テキストエディタのテストでは、正確な文字にカーソルを置く必要があります)。ほとんど場合、Squishはデフォルトでマウスクリックを(x,y)座標で記録し、これをスクリプトに書き込みます。本稿では、特定のQMLタイプについて、座標なしで記録するようにSquishを設定する方法を説明します。スクリプトから座標情報を削除することで、テスト スクリプトが簡素化され、テスト スクリプトの読みやすさが向上し、そのメンテナンスも容易になります。
ここでは、カスタム(BasicButtonから派生したものではない)Button QML Typeを操作するスクリプトの例を見てみましょう。デフォルトでは、マウスのクリック操作は以下のように(x,y)座標で記録されます。mouseClick関数に関してはこちらを参照ください。
mouseClick(waitForObject(names.o9_Button), 4, 34, Qt.LeftButton)
mouseClick(waitForObject(names.o8_Button), 27, 31, Qt.LeftButton)
mouseClick(waitForObject(names.o_Button_2), 13, 37, Qt.LeftButton)
mouseClick(waitForObject(names.c_Button), 13, 28, Qt.LeftButton)
この座標値(mouseClick関数の第2、第3引数)は、スクリーン座標ではなく、アイテム(ここではButton)の境界の左上隅を基点としています。デフォルトでは、このように座標値が記録されます。これは、テストエンジニアが後で手動で追加するよりも、削除する方が簡単だからです。
しかし、各ボタンの真ん中でクリックされていれば、座標値を指定しなくてもテストスクリプトとしては全く問題はありません。むしろ、座標値はテストのポータビリティを落としてしまうこともあります(異なるディスプレイサイズのデバイスでテストする場合など)。
では、座標を使わずにボタンのクリックを記録する方法を見てみましょう。
Qtで実装されたアプリケーションのテストをSquishで記録する方法をカスタマイズするための設定は、SQUISHDIR/etc/にあるqtwrapper.iniファイル内にあります。(ここで、SQUISHDIRはSquishのインストールフォルダ)
RecordWithoutCoordinatesは、qtwrapper.iniの1つのオプションで、設定可能な値はタイプのリストです。これらのタイプとして、C++やQMLのタイプを使用することができます。BasicButtonとQuickTextは、すでに存在していますが、上記のサンプル・スクリプトからユーザー定義されたButtonは含まれていません。このリストにタイプ名を追加するだけで、今後のすべてのテストスクリプトの記録に反映されます。
RecordWithoutCoordinates = "BasicButton", "QQuickText", "Button"
先ほどの例に戻り、Buttonタイプのカスタマイズを追加すると、生成されるスクリプトは次のようになります。
mouseClick(waitForObject(names.o9_Button))
mouseClick(waitForObject(names.o8_Button))
mouseClick(waitForObject(names.o_Button_2))
mouseClick(waitForObject(names.c_Button))
Buttonのように、常にアイテムの中央をクリックしたいタイプの場合、これらのタイプをRecordWithoutCoordinatesリストに追加することで、テストスクリプトがより単純、堅牢かつ可読性が高い状態で生成されることになり、潜在的にデバッグの容易化にもつながります。
以上が、記事の内容となります。
SquishをはじめとするQtのQA(品質保証)ツールにご興味のおありの方は、Qt JapanのEメールアドレスjapan@qt.ioまでお気軽にご連絡ください。
概要のご説明から詳細な技術的相談、また無料のツールトライアルのご案内もいたしております。