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

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(); } } } 


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

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

Source: https://habr.com/ru/post/J325058/


All Articles