コード化された 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