Introduction

備忘録。

情報が少なすぎるが、肝は

Appium Server GUI とかは一切使わないこと。

これに気づかずに時間を無駄にしました。

サンプルソースは、GitHub に置きました。

How to use?

一つ一つポイントを見ていく。

AutomationProperties をつける

UI をテストする際、どのコントロールを操作するかを決定するための識別子になる。
下記は一例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<TextBox Grid.Column="0"
AutomationProperties.Name="LeftOperand"
Text="{Binding LeftOperand, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Grid.Column="1"
AutomationProperties.Name="Operator"
Text="{Binding Operator}" />
<TextBox Grid.Column="2"
AutomationProperties.Name="RightOperand"
Text="{Binding RightOperand, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Grid.Column="3"
Text="=" />
<TextBox Grid.Column="4"
AutomationProperties.Name="Result"
IsReadOnly="True"
Text="{Binding Result}" />

要素の操作はまとめる

ある要素を捜査している途中に、別の要素を操作することは避ける。
そうしないと、値が正しく入力されないという現象が発生したりした。

1
2
3
4
5
6
7
8
9
10
11
12
[TestMethod]
public void Add()
{
AppSession.FindElementByName(LeftOperand).Clear();
AppSession.FindElementByName(LeftOperand).SendKeys("2");
AppSession.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(1);

AppSession.FindElementByName(RightOperand).Clear();
AppSession.FindElementByName(RightOperand).SendKeys("5");
AppSession.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(1);

AppSession.FindElementByName(AddCommand).Click();

Windows App Driver を起動する

冒頭に書いたように、Appium をインストールすると使えるようになる Appium Server GUI とかは一切使わないこと。

あれは全く意味がない。

Windows App Driver をダウンロード、インストールして管理者権限で起動すること。
起動の際、待ち受けのアドレス、ポート番号を指定できる。

1
C:\WINDOWS\system32>"C:\Program Files (x86)\Windows Application Driver\WinAppDriver.exe" localhost 4724

指定しない場合は http://127.0.0.1:4723 で待機するが、何故か自分の環境ではポート 4723 を SYSTEM プロセスが使用していたので、やむなくこうなった。

時間がかかることを理解する

実行に非常に時間がかかる。
一文字 TextBox に入力するだけでも 5 秒以上かかる。
自動化したからといって、人的コストは下がるかもしれないが、時間的コストは下がるどころか上がる可能性がある。

結果

appium

Source Code

https://github.com/takuya-takeuchi/Demo/tree/master/TestFramework/Appium/02_UWP