编码的UI测试 - 设置UI属性不返回(无限期挂起)

时间:2016-09-22 16:38:49

标签: user-interface testing methods blocked

我对执行Visual Studio编码的UI测试时遇到的问题感到疯狂。 方案如下。 我记录了一个编码的UI测试,它在Web应用程序(Microsoft Dynamics CRM 2011)中执行以下步骤:

  • 登录应用程序
  • 导航到页面
  • 在页面上设置html组合框的选定值

测试能够毫无问题地完成所有这些步骤,甚至可以选择组合框中的值。 Web应用程序有一个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,以便警报消息是最后显示的内容,但它也没有帮助!

我还注意到,如果我在警告信息上单击“确定”,那么测试通过!

如果我选择其他不触发任何JS的值,那么测试也会通过!

有没有人对这个问题有任何想法?

编辑1:

我注意到另一件事,我可以使用BrowserWindow对象将JS脚本发送到浏览器。如果我尝试创建警报消息,则呼叫也会被阻止,直到我在警报上单击“确定”按钮!

BrowserWindow bw = BrowserWindow.Locate("My window");
bw.ExecuteScript("alert('This is just a simple alert.');");

在我单击“确定”按钮之前,ExecuteScript语句也会被阻止! 这看起来非常奇怪!

1 个答案:

答案 0 :(得分:0)

我相信我找到了一个解决方法。 我在谷歌搜索找到任何可以帮助我解决这个问题的东西,我最终在StackOverflow上发现了这个问题Coded ui test - Select an item from a combobox without using mouse coordinates

我尝试在Dropdown中选择相同的项目,而不使用HtmlComboBox元素的“SelectedItem”属性。 我尝试使用键盘在下拉框中选择元素,首先我单击Dropdown然后我使用向下键和Enter键选择我想要的元素:

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);
    }

在我的情况下,我想要选择的元素是第3个,所以我向下按2次然后在我想要选择的元素上按Enter键。

这种解决方法不太好,因为如果元素改变位置,我会选择一个!但这是我获得测试的唯一方法,而不是在那部分存货!

我想知道是否有人有类似的问题。因为对我而言,这似乎是Coded UI测试引擎中的一个错误,它不会在警报未关闭的情况下为测试提供任何场景!