Utworzono prostą aplikację kalkulatora w formularzach internetowych. Użytkownik wprowadza numer w polu tekstowym MainContent_numberTb
i klika przycisk wyników.zakodowany projekt testowy interfejsu użytkownika, uzyskaj wartość etykiety asp
Dodano nowy "zakodowany projekt testowy interfejsu użytkownika" do mojego rozwiązania. Przetestowałem interfejs użytkownika dodając "5", wszystko działa dobrze. Chciałbym teraz porównać rzeczywisty wynik z oczekiwanym wynikiem.
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);
Wszystkie wyżej kod działa poprawnie, problem pojawia się podczas próby dostępu etykietę
<asp:Label ID="AllNumLbl_Res" runat="server"></asp:Label>
Co mogę wstawić obok typu sterowania? To nie jest edycja, ponieważ edycja jest polem tekstowym. W takim razie, co przechowuje rzeczywisty wynik, abym mógł porównać 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 więc za pomocą konsoli debugera udało mi się uzyskać wartość etykiety przy użyciu ((Microsoft.VisualStudio.TestTools.UITesting.HtmlControls.HtmlSpan)new System.Collections.ArrayList.ArrayListDebugView(((System.Collections.CollectionBase)(AllNumsTB.FindMatchingControls()).List).InnerList).Items[0]).DisplayText
ale kiedy używam tego w kodzie & ArrayListDebugView
są niedostępne ze względu na ochronę ??
////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// //// AKTUALIZACJADziękuję K Scandrett za odpowiedź ... Jeśli mógłbym się zastanawiać, czy mógłbyś również pomóc mi w sprawdzeniu poprawności ... Jeśli użytkownik wprowadzi literę lub nie dodatni numer, komunikat o błędzie zadziała ..
<asp:RegularExpressionValidator ID="regexpName"
//VALIDATION MESSAGE
UITestControl PositiveNumValMsg = new UITestControl(Browser);
PositiveNumValMsg.TechnologyName = "Web";
PositiveNumValMsg.SearchProperties.Add("Id", "MainContent_regexpName");
To wszystko działa dobrze, jednak chcę, aby sprawdzić, czy na etykiecie pojawia się lub nie ... do tej pory próbowałem
//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);
ale wszyscy wrócą tak nawet wtedy, gdy etykieta nie jest widoczny, ale wciąż jest na stronie po prostu ustawiony na niewidoczny. W takim przypadku należy sprawdzić jego style..something jak
//string labelText3 = PositiveNumValMsg.GetProperty("style").ToString();
następnie sprawdzić, czy styl zawiera visibility: visible
?
Dziękuję za pomoc, drugi przykład pracował dla mnie. Jeśli mogę, to zaktualizowałem Q, aby dołączyć zapytanie weryfikacyjne. Wiem, że to nie było częścią orignal Q, nadal będę przyznawać twoją odpowiedź jako poprawną, ale wydajesz się wiedzieć, o czym mówisz mówisz i nie mogę znaleźć tego, czego szukam, więc myślałem, że zapytam. Jeśli nie, to dziękuję za odpowiedź oryginalną! ... – John
Komunikaty sprawdzania poprawności są renderowane jako , więc powinieneś być w stanie użyć 'var PositiveNumValMsg = new HtmlSpan (Browser) ;, jeśli chcesz być bardziej bezpośredni. Zwykle zmienne zaczynają się od małej litery, więc 'positiveNumValMsg' będzie bardziej konwencjonalną nazwą. –
Nie można użyć PositiveNumValMsg.GetProperty ("styl"), ponieważ zwraca NULL .... Próbowano var PositiveNumValMsg1 = new HtmlSpan (przeglądarka); PositiveNumValMsg1.GetProperty ("Styl"); to mówi błąd wewnętrzny w wyrażeniu validator – John