2018年6月22日金曜日

MicrosoftのリリースしたOSSテスト自動化ツールWinAppDriver UI Recorder

http://www.atmarkit.co.jp/ait/articles/1806/22/news036.html
率直に言うと上記の記事を読んで、まずこれがどういうものかについて、今一不勉強でよくわからなかったので調べてみた。

ざっくり言うとWebdriverというAPIを用いて自動テストを走らせるためのソフトである、WinAppDriver用のC#のソースコードを、操作を記録して自動生成するツールということになるようだ。

Webdriverというのは、ざっくりいうともともとはSeleniumという、Webに対する自動テストOSSで使われている、JAVAやC#を含む好きなプログラミング言語でテストを記述し、WebdriverAPIを使って、同じテストを
 Linux→Chromeドライバ
 Windows→IEドライバ
 etc...
というような各プラットフォームのドライバ(要するに自動操作を受け付けるためのサーバです)に実行させる仕組み。

このWebdriverの仕組みは前述の通りもともとはWebアプリケーションの自動テストで使われていましたが、現在ではAppiumという名称でAndroidやiOS用のドライバやWindows向けには WinAppDriver等々の各種プラットフォーム向けのドライバーが開発されて、モバイルやアプリケーションの領域まで拡張されてきた。
また、このWebdriverの仕組みはW3Cでも標準化されるなど(https://www.w3.org/TR/webdriver/)テスト自動化ツールではかなり主流といって良い仕組みになっている。

例えば電卓を起動して123+456を計算し、電卓を閉じるという操作を行った場合の出力コードは次のようなものになっているようだ。
// KeyboardInput VirtualKeys="Keys.Command+ "" + Keys.Command"calc"Keys.Return" CapsLock=False NumLock=True ScrollLock=False
Console.WriteLine("KeyboardInput VirtualKeys=\"Keys.Command+ \"\" + Keys.Command\"calc\"Keys.Return\" CapsLock=False NumLock=True ScrollLock=False");
winElem0.SendKeys(Keys.Command+ "" + Keys.Command);
winElem0.SendKeys("calc");
winElem0.SendKeys(Keys.Return);

// KeyboardInput VirtualKeys=""123+456"Keys.Return" CapsLock=False NumLock=True ScrollLock=False
Console.WriteLine("KeyboardInput VirtualKeys=\"\"123+456\"Keys.Return\" CapsLock=False NumLock=True ScrollLock=False");
winElem0.SendKeys("123+456");
winElem0.SendKeys(Keys.Return);

// MouseHover on "表示は 579 です" at (193,2)
Console.WriteLine("MouseHover on \"表示は 579 です\" at (193,2)");
string xp3 = "/Pane[@Name=\"デスクトップ 1\"][@ClassName=\"#32769\"]/Window[@Name=\"電卓 ‎- 電卓\"][@ClassName=\"ApplicationFrameWindow\"]/Window[@Name=\"電卓\"][@ClassName=\"Windows.UI.Core.CoreWindow\"]/Text[@AutomationId=\"CalculatorResults\"][@Name=\"表示は 579 です\"]";
var winElem3 = MyDesktopSession.FindElementByXPath(xp3);
if (winElem3 != null)
{
   //TODO: Hover at (193,2) on winElem3
}
else
{
    Console.WriteLine($"Failed to find element {xp3}");
    return;
}
一見してわかる通り、そのまま使えるケースはよくあるキャプチャ&リプレイ系のツールと同じく、恐らく稀で、現実的にはプログラミング言語によるテストコードの開発を支援するツールという位置づけになりそうだ。

開発プロセスにもよりそうだが、Webdriver回りのフレームワークでは、基本的に開発者がテストコードを作るあるいは、テストコードを先に作ってそれを満たすソフトを開発するというのが想定されているようで、従来こういったキャプチャリプレイ系のツールというのはこれまであまり出てきていない様に見える。

SeleniumではSelenium IDEやSelenium builderというキャプチャ&リプレイツールが存在するものの、あまり活発とは言えない状況に見える。
半ば想像ではあるがこの理由は開発者がテストコードを作るのであれば、基本的にキャプチャツールはそれほど必要ないのと、キャプチャは当然ながらある程度動くプロトタイプが仕上がってからでないと使い物にならないため、開発初期の単体テストやフォーム単位の動作確認等ではあまり役に立たないという事情があるのではないかと思う。
そういった意味では今後、Microsoftがどのくらいこれをメンテナンスし続けていくかは注目に値しそうだ。

※もしご存じの方で理解が違う点があれば、突っ込みいただければ幸いです。

0 件のコメント:

ウェブサイトのURLにおけるトレイリングスラッシュの解釈と有無による動作の違い

インターネットが現代社会におけるコミュニケーションの基盤となっている今日、ウェブサイトのURLはビジネスや個人ブランディングにとって重要な役割を果たしています。URLは単にウェブページへの経路を示すだけでなく、SEO(検索エンジン最適化)においても重要な要素です。この記事では、U...