WinAppDriver: Selenium に似た Appium のテストを使用して、Windows であらゆるアプリのテストを実行

本記事は、マイクロソフト本社の SCOTT HANSELMAN の記事を抄訳したものです。【元記事】 WinAppDriver - Test any app with Appium's Selenium-like tests on Windows 2016/11/16

 

過去のブログ記事をさかのぼってみたところ、私は 2007 年から Selenium の Web テスト フレームワークを使用していました (英語)。現在では、Microsoft Edge を含む各種 Web ブラウザー向け (英語) の Selenium ドライバーが提供されており、Ruby、Python、Java、C# など、現在使用されているほぼすべての言語 (英語) で Selenium テストを作成することができます。

私は Selenium (英語) を愛用しており、BrowserStack などのシステムと併用 (英語) して、各種 OS でさまざまなブラウザーのテストを自動化しています。

"Appium" は Selenium 風の優れたテスト フレームワークで、以前の JsonWireProtocol に相当する "WebDriver (英語)" プロトコルが実装されています。

WebDriver は、ユーザー エージェントの問題検出や制御に使用するリモート コントロール インターフェイスで、プラットフォームや言語に依存しないワイヤ プロトコルにより、プロセス外のプログラムから Web ブラウザーの動作をリモートで指示することができます。

Appium の Web サイト (英語) では、「Appium は "クロス プラットフォーム" に対応しており、単一の API を使用して、複数のプラットフォーム (iOS/Android/Windows) に対するテストを作成できます。このため、iOS、Android、Windows のテスト スイート間でコードを再利用できます」と紹介されています。

Appium (英語) は Web サーバーとして機能し、REST API が公開されています。WinAppDriver (英語) では Appium を利用するために、Windows 10 Anniversary Edition で追加された新しい API を使用し、あらゆる Windows アプリのテストを実行することができます。「あらゆる Windows アプリ」とは、Win32、VB6、WPF、UWP など、文字どおりすべてのアプリを指します。あらゆるアプリを Windows ストアで公開できるだけでなく、私のような Web 開発者が使い慣れたツールを使用して、これらのアプリの完全な UI テストを実行できます。

テストは C# で作成し、Visual Studio テスト ランナーから実行することができます。任意のボタンを押すと、アプリをほぼ完全に制御できます。

 // 電卓アプリを起動
DesiredCapabilities appCapabilities = new DesiredCapabilities();
appCapabilities.SetCapability("app", "Microsoft.WindowsCalculator_8wekyb3d8bbwe!App");
CalculatorSession = new RemoteWebDriver(new Uri(WindowsApplicationDriverUrl), appCapabilities);
Assert.IsNotNull(CalculatorSession);
CalculatorSession.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(2));
// 標準モードであることを確認
CalculatorSession.FindElementByXPath("//Button[starts-with(@Name, \"Menu\")]").Click();
OriginalCalculatorMode = CalculatorSession.FindElementByXPath("//List[@AutomationId=\"FlyoutNav\"]//ListItem[@IsSelected=\"True\"]").Text;
CalculatorSession.FindElementByXPath("//ListItem[@Name=\"Standard Calculator\"]").Click();

実際に使用を開始してみると、意外なほど簡単です。

 public void Addition()
{
CalculatorSession.FindElementByName("One").Click();
CalculatorSession.FindElementByName("Plus").Click();
CalculatorSession.FindElementByName("Seven").Click();
CalculatorSession.FindElementByName("Equals").Click();
Assert.AreEqual("Display is  8 ", CalculatorResult.Text);
}

スタート メニューや Cortana を含め、Windows のあらゆる機能を自動化できます。

 var searchBox = CortanaSession.FindElementByAccessibilityId("SearchTextBox");
Assert.IsNotNull(searchBox);
searchBox.SendKeys("What is eight times eleven");
 
var bingPane = CortanaSession.FindElementByName("Bing");
Assert.IsNotNull(bingPane);
 
var bingResult = bingPane.FindElementByName("88");
Assert.IsNotNull(bingResult);

"AccessibiltyIds" を使用し、ロケール固有ではない方法によってネイティブ コントロールを参照する場合は、プラットフォーム間でテスト コードを再利用することもできます。たとえば、Windows、iOS、Web アプリ、さらには VB6 Win32 アプリで共通のサインイン用コードを作成できます。 ;)

Testing a VB6 app with WinAppDriver

Appium と WebAppDriver は、"コード化された UI テスト" の代わりに使用できます。コード化された UI テストは優れたテストですが、Windows アプリ専用です。Web 開発者またはクロス プラットフォーム アプリやモバイル アプリの開発者の皆様はぜひお試しください。


広告: 共有可能な優れた SQL を迅速に作成 ( 英語 ) SQL Prompt の無料試用版を使用して、チーム全体が共有可能な優れた SQL を迅速に作成する方法をご紹介しています。SQL を簡単に作成、リファクタリング、共有できます。ぜひお試しください (英語)

筆者紹介

Scott Hanselman は、大学教授と金融会社のチーフ アーキテクトという職歴を経て、現在はマイクロソフトに勤務する傍ら、講演やコンサルティング活動を行っています。父親であり、糖尿病患者であるほか、漫才師のなり損ない、コーンロー ヘアーのスタイリスト、著者という肩書きも持っています。