2017-07-21 10 views
13

webformsで単純な電卓アプリを作成しました。 ユーザはテキストフィールドMainContent_numberTbに数字を入力し、結果ボタンをクリックします。符号化uiテストプロジェクト、aspラベルの値を取得

新しい「コード化UIテストプロジェクト」を私のソリューションに追加しました。 '5'を追加してUIをテストしましたが、これはすべて正常に動作します。実際の結果と期待される結果を比較したいと思います。すべてのコード上記

BrowserWindow Browser = BrowserWindow.Launch("http://url"); 

UITestControl UiInputField = new UITestControl(Browser); 
UiInputField.TechnologyName = "Web"; 
UiInputField.SearchProperties.Add("ControlType", "Edit"); 
UiInputField.SearchProperties.Add("Id", "MainContent_numberTb"); 

//Populate input field 
Keyboard.SendKeys(UiInputField, "5"); 

//Results Button 
UITestControl ResultsBtn = new UITestControl(Browser); 
ResultsBtn.TechnologyName = "Web"; 
ResultsBtn.SearchProperties.Add("ControlType", "Button"); 
ResultsBtn.SearchProperties.Add("Id", "MainContent_calBtn"); 

Mouse.Click(ResultsBtn); 

正常に動作します私はコントロールの種類の横に何を入れないラベルにアクセスするために

<asp:Label ID="AllNumLbl_Res" runat="server"></asp:Label> 

をしようとしたときに、問題が発生?編集はテキストフィールドなので編集しません。次に、実際の結果をどのように格納するので、私はAllNumsTBを比較できますか?

string expectedAllNums = "1, 2, 3, 4, 5"; 
UITestControl AllNumsTB = new UITestControl(Browser); 
AllNumsTB.TechnologyName = "Web"; 
AllNumsTB.SearchProperties.Add("ControlType", "?????"); 
AllNumsTB.SearchProperties.Add("Id", "MainContent_AllNumLbl_Res"); 

if(expectedAllNums != AllNumsTB.??????) 
{ 
    Assert.Fail("Wrong Answer"); 
} 

UPDATE OKので、私は((Microsoft.VisualStudio.TestTools.UITesting.HtmlControls.HtmlSpan)new System.Collections.ArrayList.ArrayListDebugView(((System.Collections.CollectionBase)(AllNumsTB.FindMatchingControls()).List).InnerList).Items[0]).DisplayText

を使用してラベルの値を得ることができたデバッガコンソールを使用したが、私はコードでこれを使用する場合& ArrayListDebugViewは、保護のためにアクセスできません??

///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////// //// 更新回答ありがとうございますK Scandrettさんの回答...もし私があなたにも妥当性確認の手助けをしてくれるのだろうかと疑問に思うかもしれません...ユーザーが文字または正の数以外の数字を入力するとエラーメッセージこのすべてが正常に動作します。..

<asp:RegularExpressionValidator ID="regexpName" 

//VALIDATION MESSAGE 
       UITestControl PositiveNumValMsg = new UITestControl(Browser); 
       PositiveNumValMsg.TechnologyName = "Web"; 
       PositiveNumValMsg.SearchProperties.Add("Id", "MainContent_regexpName"); 

を発射します、しかし、私はこれまでのところ、私が試してみました...ラベルが表示されていないかどうかをテストしたい

//bool visible = false; 
      //System.Drawing.Point p; 

      //// If the control is offscreen, bring it into the viewport 
      //PositiveNumValMsg.EnsureClickable(); 

      // // Now check the coordinates of the clickable point 
      // visible = PositiveNumValMsg.TryGetClickablePoint(out p) 
      //  && (p.X > 0 || p.Y > 0); 

      var isVisible = PositiveNumValMsg.WaitForControlPropertyNotEqual(UITestControl.PropertyNames.State, ControlStates.Invisible); 

ラベルは表示されていなくてもすべてtrueを返しますが、表示されていないページにはまだ表示されません。その場合、私はスタイルがvisibility: visibleが含まれているかどうかを確認し、その後

//string labelText3 = PositiveNumValMsg.GetProperty("style").ToString(); 

のようにそのstyle..somethingを確認する必要がありますか?

答えて

3

InnerTextプロパティを取得したいとします。

それはControlTypeを設定することは必須ではありませんので、以下のいくつかのバリエーションが動作するはずです:ASP.Netバリデータをテストについて:https://social.msdn.microsoft.com/Forums/en-US/69ea15e3-dcfa-4d51-bb6e-31e63deb0ace/how-to-read-dynamic-text-from-label-using-coded-ui-for-web-application?forum=vstestから

UITestControl AllNumsTB = new UITestControl(Browser); 
AllNumsTB.TechnologyName = "Web"; 
AllNumsTB.SearchProperties.Add(HtmlControl.PropertyNames.Id, "MainContent_AllNumLbl_Res"); 

var result = AllNumsTB.GetProperty(HtmlLabel.InnerText).Trim(); 
// var result = AllNumsTB.GetProperty("InnerText").Trim(); 

OR

var AllNumsTB = new HtmlLabel(Browser); 
AllNumsTB.TechnologyName = "Web"; 
AllNumsTB.SearchProperties.Add(HtmlControl.PropertyNames.Id, "MainContent_AllNumLbl_Res"); 
var result = AllNumsTB.InnerText; 

string result2; 

// you may need to include this section, or you may not 
if (result.Length > 0) 
{ 
    AllNumsTB.WaitForControlReady(); 
    result2 = AllNumsTB.InnerText; 
} 

EDITを

私は、次のメソッドでバリデータメッセージが表示されるかどうかを確認します。

1)テストASPを作成しました。正確に2桁の数字を必要と正規表現のバリデータとネットページ:

<asp:TextBox ID="numberTb" runat="server"></asp:TextBox> 
<asp:RegularExpressionValidator ID="regexpName" ControlToValidate="numberTb" ValidationExpression="\d{2}" runat="server" ErrorMessage="Please enter 2 digits"></asp:RegularExpressionValidator> 
<asp:Button ID="Button1" runat="server" Text="Button" /> 

2)がコード化されたUIテストビルダーを実行し、=> のClicked入力ボックスを記録し始めました。タイプ:s; タブを押してください(バリデータのエラーメッセージが表示されています)。

3)レコーダーを一時停止しました。

4)[Generate Code]アイコンをクリックし、メソッド名を入力します。 "Add and Generate"ボタンをクリックしてください。

5)これで、Crosshairアイコンがバリデータメッセージにドラッグアンドドロップされました。オプションのリストをスクロールするとControlDefinitionになります。右クリックして[Add Assertion ...]を選択します。

6)コンパレータを "Contains"に変更しました。比較値は "visible;"になります。アサーションエラーメッセージを出しました。入力を入力する最初のトリガー(またはしない -

7)は今、私たちは2つのメソッドを実行することにより、バリデータをテストするコードを持っている

など、「コードを生成」アイコンをクリックし、それをメソッド名を与えました)バリデータメッセージ。 2番目はバリデータのメッセージの可視性をテストします。私は、生成されたコードをコピーして貼り付け、それを使ってもう一つの反対のテストを "hidden;"を使って書きました。正しい入力が与えられたとき。両方のテストを実行し、両方とも合格しました。あなたが(値を置換している)のようなもので終わるだろう

public void DigitValidatorMsgShownWithIncorrectStringInput() 
{ 
    #region Variable Declarations 
    HtmlSpan uIAtleast2digitsPane = this.UIHomePageMyASPNETApplWindow.UIHomePageMyASPNETApplDocument.UIAtleast2digitsPane; 
    #endregion 

    // Verify that the 'ControlDefinition' property of 'At least 2 digits' pane contains ' visible;' 
    StringAssert.Contains(uIAtleast2digitsPane.ControlDefinition, " visible;", "The validator was not shown"); 
} 

もちろん、あなたが探しているものを知っていれば、このすべては、手動でコード化することができます。

+0

ご協力いただきありがとうございます.2番目の例は私のために働いています。私が検証クエリを含めるようにQを更新したかもしれません。 私はこのオリジナルのQの一部ではないことを知っていますが、あなたの答えは正しいと思いますが、あなたはあなたが何であるかを知っているようですが、 について話しています。とにかく、元の答えに感謝しています... – John

+0

検証メッセージはとしてレンダリングされるので、より明示的にするには、 'var PositiveNumValMsg = new HtmlSpan(Browser);'を使用できるはずです。通常、変数は小文字で始まるので、 'positiveNumValMsg'はより一般的な名前になります。 –

+0

これはNULLを返すので、PositiveNumValMsg.GetProperty( "style")を使用できません....試行var PositiveNumValMsg1 = new HtmlSpan(Browser); PositiveNumValMsg1.GetProperty( "Style");これは式バリデータの内部エラーです – John

関連する問題