0

コード化された UI テストについて知りたいと思いました。そこで、いくつかのコード化された UI テストを作成し、少し遊んでみました。

しかし、今、私は自分自身を助けることができない時点にいます。次の問題があります。dotNet 4.5 プログラムからいくつかのアクションを記録すると、レコーダーはSearchProperties[WinText.PropertyNames.Name]を介してフォーム、ボタン、テキストフィールドなどを見つけます。

テキスト コントロールでアサーションを実行したいとします。WinText.PropertyNames.Name は計算された値になります。そのため、計算に影響するフォームの入力値を変更すると、WinText.PropertyNames.Name が新しい値に変更され、コード化された UI テストは WinText を検索したため、変更された値を持つテキスト コントロールを見つけられません。WinText.PropertyNames.ControlNameの代わりにコントロールのPropertyNames.Name 。

私の質問は、コード化された ui テスト ビルダーが必要なオブジェクトを見つけるために使用する標準の検索プロパティの構成を変更する方法はありますか?

記録されたオブジェクトごとにこれを後で変更するのは大変な作業だからです。

PS: C:\Program Files (x86)\Common Files\microsoft shared\VSTT\11.0\IEPropertyConfiguration.xmlについては話していません。これは ie サイトでのみ有効です =)

追加:

物事を明確にしましょう:

これが私のコードです:

public class UIItem100180Window : WinWindow
    {
        
        public UIItem100180Window(UITestControl searchLimitContainer) : 
                base(searchLimitContainer)
        {
            #region Search Criteria
            this.SearchProperties[WinWindow.PropertyNames.ControlName] = "wert2Praemie12";
            this.WindowTitles.Add("Any Title");
            #endregion
        }
        
        #region Properties
        public WinText UIItem100180Text
        {
            get
            {
                if ((this.mUIItem100180Text == null))
                {
                    this.mUIItem100180Text = new WinText(this);
                    #region Search Criteria
                    this.mUIItem100180Text.SearchProperties[WinText.PropertyNames.Name] = "1.001,80";
                    this.mUIItem100180Text.WindowTitles.Add("Any Title");
                    #endregion
                }
                return this.mUIItem100180Text;
            }
        }
        #endregion
        
        #region Fields
        private WinText mUIItem100180Text;
        #endregion
    }

UI にText-Control(UIITem100180Text: WinText)を作成する親コントロール (UIItem100180Window: WinWindow)を取得しました。これは、計算の値を表します。問題は、両方に同じ.PropertyNames.ControlName =) があることです。

つまり、追加する場合:

this.mUIItem100180Text.SearchProperties[WinText.PropertyNames.ControlName] = "wert2Praemie12";

私の親コントロールであるWinWindowが常に見つかります。私がそれを追加していない場合、および計算の値が変更された場合 (計算方法が編集された可能性があります..)、およびthis.mUIItem100180Text.SearchProperties[WinText.PropertyNames.Name] = "1.001,80";と等しくない場合。コントロールが見つからず、「..control not found」というエラー メッセージがスローされます。

後で、この行で問題が発生し、テキスト コントロール (WinText) の値を確認します。

public void VerifyTextControl()
    {
        #region Variable Declarations
        WinText uIItem100180Text = this.xxx.UIItem100180Window.UIItem100180Text;
        #endregion

        // Verify that the 'DisplayText' property of '1.001,80' label equals '1.001,80'
        Assert.AreEqual("1.001,80", uIItem100180Text.DisplayText, "järhlich muss 1.001,80 € betragen!");
    }

私のuIItem100180Text:WinTextはWinWindowとして処理されます。なぜなら、PropertyNames.ControlName を検索しているときに親コントロールしか見つからないからです。そのため、 .DisplayText-method を使用できず、エラー メッセージで終了します。

最善の解決策は、親コントロールでアサーションを行うことです。これは、テキストコントロールの値も保持し、私が持っていたような問題が発生しないためです。

この投稿は、同じ点で苦労している人々にとって役立つかもしれません。

注:
UITestControl->WinControl->WinText
UITestControl->WinControl->WinWindow

4

3 に答える 3

0

検索プロパティを構成できます。これがお役に立てば幸いです。

http://blogs.msdn.com/b/visualstudioalm/archive/2012/12/10/coded-ui-test-configuring-search-properties-while-recording-on-internet-explorer.aspx

于 2014-02-26T07:42:17.620 に答える
0

多くの苦痛と努力を経て。機能やコントロールを微調整、追加、削除するたびに再生成されるデザイナー ファイルに触れないでください。

プロジェクト (.uitest) で uimap ファイルを開くと、キャプチャしたすべてのコントロールとメソッドが表示されます。リストされたコントロールを右クリックします: 2 つの注意事項。名前を変更します (醜い動的コントロールに最適) UIItem100180Textもプロパティです。

プロパティでは、検索とフィルターのプロパティを調整できます 検索はフィルターよりも優先されます 重要でない値を直接削除したり、新しい基準を追加したり、除外したい値を削除したり、演算子を含むに切り替えたりすることもできます

これにより、問題がより確実に解決されるはずです。

ただし、動的コントロールがある場合、これは、.uitest ファイルの下に提供される通常の cs ファイル、直接の親コントロールに対する拡張メソッド (cell->parent->table、button->parent->tab)、または機能層 ( http://www.slideshare.net/tharindaliyanage/coded-ui-hand-code-based-on-page-object-modelを参照) を追加できます。

この投稿を簡単にするために、拡張メソッドは次のようになります

public static WinText GetSuperDynamicButton(this UITextWindow container, string displayText)
{
   var button = new WinText(container);
   button.SearchProperties[WinText.PropertyNames.Name]=displayText;
   //if you wanted to use the contains style 
   //button.SearchProperties.Add(new PropertyExpression(WinText.PropertyNames.Name, displayText, PropertyExpressionOperator.Contains));
   return button;
}
于 2015-09-29T20:41:14.187 に答える