ユーザーインターフェースカード

UIテストでの作業の大部分は、Windows用のデスクトップアプリケーションです。 さまざまな記事で、ユーザーインターフェイスマップ(PageObject's)を書いている間、UISpyを使用して手動でスペルロケーターを表示しています。



5年前、私のテストでそのような要素の数が多くなりすぎ、コントロールがより複雑になり、UIテスト用のライブラリがキノコのように成長し始めました。



必要なXPathを見つけるルーチンを喜びに変えることにしました。



最初はVisual Studio UIMap Editorを使用しました。アプリケーションが複雑であればあるほど、速度とロケーターの置換という点で私には不向きでした。 UIAutomationとそのラッパー(TestStack.White、Cuite、Microsoft UITestなど)に関する別の記事で理由を説明します。



だから挑戦



簡単なPageObjectのエディターを作成します。 ヘルパーツール:UIAVerify。



一般原則





どうした



Windows 10計算機で追加の例を使用する:



  1. 「電卓」ウィンドウのマップを作成しています。このため、デスクトップツリーのマップエディターで、ワンクリックですべてのウィンドウオブジェクトを転送し、余分なものを削除します。 ロケーターは自動的に添付されます。 要素を手動で追加できます(たとえば、Seleniumの場合)、空想の飛行は無制限です
  2. 生成された要素名を確認します。 気に入らない場合は、手動で名前を変更します
  3. UIAutomationラッパーのマップを保存します(通常のXML => C#コンバーター。任意のラッパーを使用できます、Selenium、MS UITest、TestStack.White)


すべての時間:3分



右側には、UIAVerifyデスクトップツリーの類似物があります。 左:地図



画像



結果



4ファイルがバージョン管理下で送信されます。



XMLでマップする
<?xml version="1.0" encoding="utf-8"?> <Map Version="2.0.0.0" Uid="7b797972-8c3c-4dbf-9c30-7cc8ae14afda"> <Assembly Name="Calc" FrameWork="NavyWindows"> <Assembly Name="Map" FrameWork="NavyWindows"> <Element ControlType="Window" Name="" Comment="Window """> <Control Comment="Window "TitleBar"" IsHidden="true" Name="" ControlType="Window"> <Property Name="Name"></Property> <Control Comment="Button "Close"" Name="" ControlType="Button"> <Property Name="AutomationId">Close</Property> </Control> ... </Map>
      
      







形成されたラッパーカードUIAutomation
 namespace Calc { public partial class UIWindow : UIWindow { public UIWindow(UIControl control) { Wrap(control); } public UIWindow() { } public static UIWindow Instance { get { return Desktop.Instance.Get<UIWindow>(XPath); } } public static By XPath { get { return By.Xpath("Name="); } } /// <summary> /// Button "plusButton" /// </summary> public UIButton UIButton { get { return Get<UIButton>(By.Xpath(@"AutomationId=plusButton")); } } ... </Map>
      
      







MapExt.csおよびさまざまな拡張機能
 namespace Calc { public static class UIWindowExt { public static int Result(this UIWindow window) { var textValue = window.UIResultText.Text .Replace("  ", "") .Replace(" ", ""); return int.Parse(textValue); } } }
      
      







CalculationTests.csテスト
 using Microsoft.VisualStudio.TestTools.UnitTesting; using Calc; using System.Diagnostics; using System; namespace CalcTests { [TestClass] public class CalculationTests : IDisposable { public CalculationTests() { _process = Process.Start("calc.exe"); _calc = UIWindow.Instance; } [TestMethod] public void Sum() { _calc.UIButton.Click(); _calc.UIButton.Click(); _calc.UIButton.Click(); _calc.UIButton.Click(); Assert.AreEqual(6, _calc.Result(), "  "); } public UIWindow _calc { get; set; } Process _process; public void Dispose() { _calc.Close(); } } }
      
      







コメントには、すでに多くの代替ソリューション、リンクのリンク、より成功した例があると思います。



ご清聴ありがとうございました!



All Articles