powershell uiautomation tutorial
PowerShell UIAutomationチュートリアル:デスクトップアプリケーションのUIオートメーション
UIAutomationは、GUI自動化テスト用のオープンソースプロジェクトのPowerShell拡張機能です。 Win32、Windowsフォーム、WPFなどをサポートします。
このチュートリアルでは、PowerShellがモジュールを使用してUIオートメーションを実装する方法に焦点を当てます。これを説明するために、例としてWindowsフォームアプリケーションを使用します。
学習内容:
- MicrosoftUIAutomationの使用を開始する
- UIAutomationをインポートする
- 例を使用したUIオートメーション
- 親子関係とコントロールのプロパティを見つける
- 高度な実装:スクリプトを書くためのアプローチを簡素化する
- 結論:
- 推奨読書
MicrosoftUIAutomationの使用を開始する
プロジェクトはPowerShellスクリプト用の唯一のライブラリを提供するため、インストールは必要ありません。モジュールをダウンロードしてスクリプトにインポートするだけです。
また読む=> 完全な詳細を備えた35以上の最高のGUIテストツール
PowerShellの詳細と、PowerShellの使用を開始する方法を理解するには、以下を確認してください。
UIAutomationをインポートする
1) 公式ウェブサイトから最新のパッケージをダウンロードして解凍します。 UIオートメーションPowerShell拡張機能 ラオカルパスへ、例えば、 C: UIAutomation
2) モジュールをPowerShellスクリプトにインポートします:( 注意 :このコマンドを実行するときは、PowerShellを管理者として実行していないことを確認してください)
Import-Module C:UIAutomationUIAutomation.dll これで、モジュールで定義されたコマンドを使用して、UI自動化テストを開始できます。
例を使用したUIオートメーション
簡単なWindowsフォームアプリケーションから始めましょう。これは、GUI自動化テストで見られる可能性のあるいくつかの典型的なコントロールをカバーしています。

この例では、いくつかの基本的な個人情報を含むフォームを送信する手順を自動化するように指示されています。
ステップ1) 「AnnaSmith」という名前を入力します
ステップ2) 性別「女性」を選択してください
ステップ3) 卒業した場合の答えとして「はい」を選択してください。
ステップ4) 「送信」をクリックします
それを行うためのスクリプトは次のようになります。
Start-Process 'Test Form' #Step1: input the name “Anna Smith” Get-UIAWindow -Name 'Test Form' | Get-UIATabItem -Name 'BasicInfo'| Get-UIAEdit -AutomationId 'textBox1' -Name 'Name'|Set-UIATextBoxText 'Anna Smith' #Step2: select the gender “Female” Get-UIAWindow -Name 'Test Form' | Get-UIATabItem -Name 'BasicInfo'| Get-UIAComboBox -Name 'Gender' | Invoke-UIAListItemSelectItem -ItemName 'Female' #Step3: choose “Yes” as the answer of if graduated. Get-UIAWindow -Name 'Test Form' | Get-UIATabItem -Name 'BasicInfo'| Get-UIARadioButton -AutomationId 'Graduated' -Name 'Yes'|Invoke-UIAControlClick #Step4: click “Submit” Get-UIAWindow -Name 'Test Form' | Get-UIAButton -Name 'Submit'| 上記のスクリプトから、アプリケーションのコントロールをどのように操作しているかがわかると思います。さらに理解しましょう。
例として最初のステップを取ります。
Get-UIAWindow -Name 'Test Form' | Get-UIATabItem -Name 'BasicInfo'| Get-UIAEdit -AutomationId 'textBox1' -Name 'Name'|Set-UIATextBoxText 'Anna Smith' この行で何が起こっているかについての内訳は次のとおりです。
1) スクリプトは最初にトップウィンドウを見つけ、次にパイプラインを介してその子コントロールを見つけます。これは、ターゲットコントロール(「名前」という名前の編集ボックス(またはテキストボックス))が見つかるまで実行されます。
2) コントロールを見つけると、コントロールのタイプを要求するので、使用するコマンドを知ることができます。 Get-UIAWindow –はウィンドウで、Get-UIAEdit –は編集/テキストボックスです。
3) また、コントロールの1つ以上のプロパティが必要です。この例では、コントロールを識別するためのプロパティとしてNameのみを使用します。 注意 :AutomationIdとClassも、コントロールを見つけるときに一般的に使用されるプロパティです。
4) ターゲットコントロールが見つかったら、別のコマンドを使用してコントロールのアクションを呼び出します。この例では、テキストボックスのテキストを設定するのはSet-UIATextBoxTextです。
これは、UIオートメーションがUIオートメーションを実現するための主な方法です。
YouTubeからビデオをダウンロードするためのアプリケーション
さまざまなタイプのコントロールのコマンドとアクションを呼び出すコマンドは、公式サイトのヘルプドキュメントにあります。 UIオートメーションPowerShell拡張機能
残りの手順は、静脈が似ています。それでは、他の重要なトピックに移りましょう。
親子関係とコントロールのプロパティを見つける
このようなパイプラインを作成するのは簡単ですが、重要な部分は、ターゲットコントロールを含むプロパティと子コントロールを見つける方法です。私の経験では、これらは私が試した2つです。
#1)パッケージでUIAutomationSpyを使用します。
ダウンロードしたパッケージには、デスクトップ上のコントロールをキャプチャできるツールが含まれています。デスクトップでUIの準備ができたら、UIAutomatを開きます ionSpy.exe :

- 「開始」をクリックしてキャプチャを開始します。
- 何をキャプチャするかをコントロールにカーソルを移動します。
- コントロールが強調表示され、スクリプトがウィンドウインターフェイスに表示されている場合は、キャプチャが成功したことを意味します。
- 「停止」をクリックして、キャプチャを停止します。
- 左側の(階層)タブをクリックすると、コントローラーの親子関係が上からターゲットまで表示されます。

- 右側の(スクリプト)タブをクリックすると、コントロールの完全なパイプラインが表示されます。

ターゲットコントロールを検索するために、パイプラインのすべてのコントロールとすべてのプロパティを含める必要はないことに注意してください。実際、私たちが使用するものは非常に単純です(上記の例を参照)。
Get-UIAWindow -Name 'Test Form' | Get-UIATabItem -Name 'BasicInfo'| Get-UIAEdit -AutomationId 'textBox1' -Name 'Name' 残念ながら、含める必要のあるコントロールの数に関する公式の特効薬はありません。それには試練と経験が必要です。
UIAutomationSpyのそれほど優れていない点:
- フレンドリーなインターフェースがありません
- コントロールを次々にキャプチャして、必要な詳細を取得する必要があります。
#2)外部ツールを使用してWindowsデスクトップのコントロールを検査する
ウェブサイトからビデオをダウンロードするプログラム
推奨されるツールは、Microsoftが提供するinspect.exeです。ツールを開くと、ウィンドウのコントロールの詳細がすべて表示されます。

inspect.exeのそれほど優れていない点
- 詳細をエクスポートする方法はありません。
- UIオートメーションモジュールは、すべての子コントロールを取得するためのGet-UIAControlChildrenなどのコマンドを提供します。 inspect.exeはウィンドウの下のすべてのコントロールを横断できますが、複雑なウィンドウのパフォーマンスは評価されません。
高度な実装:スクリプトを書くためのアプローチを簡素化する
上記の紹介から、パイプラインはモジュールを使用してスクリプトを作成する主な方法であることがわかりますが、パイプラインはそれほど長くない場合もあります。シンプルで簡単にするアプローチがあり、主なアイデアは、コントロールのデータをXMLファイルに抽出し、必要に応じてXMLファイルからパイプラインに参加することです。
上記の例を続けましょう。
まず、コントロールのプロパティと親子関係を含むXMLファイルを生成します。必要なすべてのコントロールにノードを追加します。ノード名は一意であるため、名前でコントロールをすぐに見つけることができ、コマンドとそのプロパティはノードのプロパティとして設定されます。
テストするテストフォームのXMLファイルは次のとおりです。
一部の関数は、xmlファイルを検索してパイプラインに参加し、それらを実行するように定義する必要があります。
function getPipeline($nodeName) { $object_xml = (Invoke-WebRequest(controls.xml')) $control = $object_xml.SelectSingleNode('//$nodeName ') $pipeline = '' do { $string = '' $string = $control.method foreach($a in $control.Attributes) { if(!$a.Name.ToLower().Equals('method')) { $string = $string + ' -' + $a.Name + ' '' +$a.Value +''' } } $ pipeline = $string + ' |' +$ pipeline $control= $control.ParentNode } while (!$control.Name.Equals('#')) return $pipeline.Remove($pipeline.length-1,1) } function setText($textbox,$value) Set-UiaEditText -text $value' Invoke-Expression $iex function selectItem($combobox,$item) { #get the pipeline and invoke the expression } function toggleRadioButton($radioButton) { #get the pipeline and invoke the expression } function click($control) { #get the pipeline and invoke the expression } これまでのところ、コントロール自体が変更されない限り、これらはほぼ1回限りのタスクです。
これで、次のスクリプトの手順を自動化できます。
#import the functions defined previously . MyLibrary.ps1 setText 'Name' 'Anna Smith' selectItem 'Gender' 'Female' toggleRadioButton 'Graduated' click 'Submit' このようにして、スクリプト内のパイプラインの束を取り除くことができ、習熟度が大幅に向上します。
推奨読書=> SikuliGUI自動化ツールの概要
結論:
Microsoft UIAutomationは、PowerShellを使用してWindowsデスクトップでUI自動化テストを実行したい人に最適なライブラリです。
上記の紹介は、ツールのほんの一部です。その単純化されたアプローチは、テストスクリプトからデータを抽出するというアイデアに触発されています。これは、自動化テストの作成能力を向上させるための優れた方法です。それについてもっと探る ここに 。
以下のコメントを共有してください。UIAutomationユーザーからの経験をお待ちしています。
推奨読書
- 初心者向けの詳細なEclipseチュートリアル
- SeeTest Automation Tutorial:Mobile Test Automation Tool Guide
- DevOps自動化:自動化はDevOpsプラクティスにどのように適用されますか
- Gebチュートリアル-Gebツールを使用したブラウザ自動化テスト
- 自動化テストとは(テスト自動化を開始するための究極のガイド)
- Selendroidチュートリアル:Androidモバイルテスト自動化フレームワーク(パート1)
- Katalon Studioチュートリアル:あなたが待ち望んでいた無料のテスト自動化ツール
- Appium Studio for Eclipse:EclipseからのエンドツーエンドのAppium / Selenium自動化