Кодированный тест пользовательского интерфейса - установить свойство пользовательского интерфейса, которое не возвращается (висит бесконечно)
Я схожу с ума от проблемы, которую я обнаружил при выполнении теста Visual Studio Coded UI. Сценарий таков. Я записал кодированные тесты пользовательского интерфейса, которые выполняют следующие шаги в веб-приложении (Microsoft Dynamics CRM 2011):
- Войти в приложение
- Перейдите на страницу
- На странице установите выбранное значение html-списка.
Тест может выполнить все эти шаги без проблем, даже выбрав значение в выпадающем списке. В веб-приложении есть фрагмент Javascript, который выполняется при изменении выбранного элемента. если выбрано одно из значений, пользователю будет выдано предупреждающее сообщение, и приложение установит для выбранного элемента значение по умолчанию!
Код JavaScript выглядит так:
switch (Xrm.Page.getAttribute("status").getValue()) {
case 3: //Authorised
alert("Please use the method XPTO to update the record status to Authorised!");
Xrm.Page.getAttribute("status").setValue(1);
Xrm.Page.getControl("tatus").setFocus(true);
return false;
Метод тестирования пользовательского интерфейса, который выполняет изменение в выпадающем списке, выглядит следующим образом:
/// <summary>
/// Select a value in the Status dropdown box
/// </summary>
public void SelectStatus()
{
#region Variable Declarations
HtmlComboBox uIStatusComboBox = this.UIHttpsappWindow200.UIModuleUITEDocument5.UIWorkplaceDashboardsFrame.UIModuleUITEDocument.UIStatusComboBox;
// Select 'Authorised' in 'Status' combo box
uIStatusComboBox.SelectedItem = this.SelectStatus_SPParams.UIStatusComboBoxSelectedItem;
}
Метод тестирования может изменить значение в выпадающем списке, и пользователю отображается предупреждающее сообщение. Однако эта часть кода uIStatusComboBox.SelectedItem = this.SelectStatus_SPParams.UIStatusComboBoxSelectedItem;
никогда не возвращается и тест просто висит там до истечения времени ожидания!
Я понятия не имею, как работать вокруг этого вопроса! Я думал, что, возможно, проблема может заключаться в том, что у нас есть код JavaScript, который выполняется после того, как предупреждение отображается пользователю. Я изменил JS так, чтобы предупреждающее сообщение отображалось в последнюю очередь, но оно также не помогло!
Я также заметил, что если я нажму Ok в сообщении с предупреждением, тест пройден!
Если я выберу другое значение, которое не вызывает JS, то тест также пройдет!
У кого-нибудь есть идеи по этому поводу?
Изменить 1:
Я заметил еще одну вещь: я могу использовать объект BrowserWindow для отправки JS-скрипта в браузер. Если я пытаюсь создать предупреждающее сообщение, вызов также блокируется до тех пор, пока я не нажму кнопку "ОК" в предупреждении!
BrowserWindow bw = BrowserWindow.Locate("My window");
bw.ExecuteScript("alert('This is just a simple alert.');");
Оператор ExecuteScript также блокируется, пока я не нажму кнопку ОК! Это кажется очень, очень странным!
1 ответ
Я считаю, что нашел обходной путь. Я попытался найти что-нибудь, что могло бы помочь мне с этой проблемой, и я нашел этот вопрос в тесте пользовательского интерфейса Stackru Coded - выберите элемент в комбинированном окне без использования координат мыши
Я пытаюсь выбрать тот же элемент в раскрывающемся списке без использования свойства "SelectedItem" элемента HtmlComboBox. Я пытаюсь использовать клавиатуру для выбора элемента в раскрывающемся списке, сначала я нажимаю на раскрывающийся список, а затем использую клавиши "Вниз" и "Ввод", чтобы выбрать нужный элемент:
public void SelectStatus_SP(string SelectedItem)
{
#region Variable Declarations
HtmlComboBox uIStatusComboBox = this.UIHttpsappWindow200.UIpopupUITEDocument5.UIWorkplaceDashboardsFrame.UIpopupUITEDocument.UIStatusComboBox;
#endregion
Mouse.Click(uIStatusComboBox);
Keyboard.SendKeys(uIStatusComboBox, "{Down}{Down}{Enter}", ModifierKeys.None);
}
В моем случае элемент, который я хочу выбрать, является третьим, поэтому я спускаюсь вниз 2 раза и затем нажимаю ввод на элементе, который я хочу выбрать.
Этот обходной путь не очень хорош, потому что, если элемент меняет положение, я выберу рабочий! Но это был единственный способ, который я получил для теста, чтобы не быть запасным в этой части!
Интересно, у кого-нибудь была похожая проблема? Поскольку мне кажется, что это ошибка в движке Coded UI Test, он не создает никаких условий для хранения теста, пока предупреждение не закрыто!