Кодированный тест пользовательского интерфейса - установить свойство пользовательского интерфейса, которое не возвращается (висит бесконечно)

Я схожу с ума от проблемы, которую я обнаружил при выполнении теста 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, он не создает никаких условий для хранения теста, пока предупреждение не закрыто!

Другие вопросы по тегам