Я с ума схожу с проблемой, которую я обнаружил при выполнении Visual Studio Coded UI Test. Сценарий выглядит следующим образом. я записал кодированные тесты пользовательского интерфейса, выполните следующие действия в вебе-приложениях (Microsoft Dynamics CRM 2011):Coded UI Test - установить свойство пользовательского интерфейса, которое не возвращается (висит на неопределенное время)
- Вход в приложение
- Перейдите на страницу
- На странице установить выбранное значение из html combobox
Тест может выполнить все эти шаги без проблем, даже выбрав значение в выпадающем списке. В веб-приложении есть часть 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;
Метод испытания UI, который выполняет изменения в выпадающий список выглядит следующим образом:
/// <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-тест, также Pass!
Есть ли у кого-нибудь идеи по этой проблеме?
Edit 1:
я заметил другую вещь, я могу использовать объект BrowserWindow отправить сценарий JS в браузере. Если я попытаюсь создать предупреждающее сообщение, вызов также блокируется, пока я не нажмем кнопку «ОК», на предупреждение!
BrowserWindow bw = BrowserWindow.Locate("My window");
bw.ExecuteScript("alert('This is just a simple alert.');");
Операция ExecuteScript также блокируется, пока я не нажму кнопку OK! Это кажется очень странным!