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


 

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

 

WinAppDriver - Appium testing Windows Apps

過去のブログ記事をさかのぼってみたところ、私は 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 テストを実行できます。

Your preferred language, your preferred test runner, the Appium Server, and your app

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

Skip to main content