Создано приложение простого калькулятора в webforms.
Пользователь вводит номер в текстовое поле MainContent_numberTb
и нажимает кнопку результатов.
Добавил новый "кодированный тестовый проект UI" в мое решение. Испытайте пользовательский интерфейс, добавив "5", это все работает отлично. Теперь хотел бы сравнить фактический результат с ожидаемым результатом.
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
ОК, поэтому с помощью консоли отладчика я смог получить значение метки с помощью ((Microsoft.VisualStudio.TestTools.UITesting.HtmlControls.HtmlSpan)new System.Collections.ArrayList.ArrayListDebugView(((System.Collections.CollectionBase)(AllNumsTB.FindMatchingControls()).List).InnerList).Items[0]).DisplayText
но когда я использую это в коде и ArrayListDebugView
недоступны из-за защиты?
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// UPDATE Спасибо 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);
но все они верны, даже если метка не отображается, но она все еще находится на странице, которая просто не указана. В этом случае я должен проверить его стиль.. что-то вроде
//string labelText3 = PositiveNumValMsg.GetProperty("style").ToString();
затем проверьте, содержит ли стиль visibility: visible
?