2016-09-22 69 views
0

我對執行Visual Studio編碼的UI測試時發現的問題感到瘋狂。 該場景如下。 我記錄了做一個Web應用程序下面的步驟編碼的UI測試(的Microsoft Dynamics CRM 2011):編碼UI測試 - 將UI屬性設置爲不返回(無限期懸掛)

  • 登錄到應用程序
  • 導航到一個頁面
  • 在頁面設置選擇的值的html組合框

測試能夠做到所有這些步驟沒有問題,即使在組合框中選擇了值。 Web應用程序具有一段JavaScript,當選定的項目發生更改時會執行該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; 的這部分永遠不會返回,測試只是在那裏掛起,直到它超時!

我沒有ideia如何工作圍繞這個問題!我在想,也許這個問題可能是因爲我們有向用戶顯示警報之後執行的JavaScript代碼。我改變了JS,以便提醒消息是最後顯示的東西,但它也沒有幫助!

我還注意到,如果我在警告消息上單擊確定,測試通過!

如果我選擇其他值不觸發任何JS測試也通過!

有沒有人有任何關於這個問題的想法?


編輯1:

我注意到另一件事,我可以使用BrowserWindow對象發送一個JS腳本的瀏覽器。如果我嘗試創建一條警報消息,則該通話也會被阻止,直到我點擊確定按鈕上的警報!

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

ExecuteScript語句也被阻止,直到我點擊OK按鈕! 這看起來很奇怪!

回答

0

我相信我找到了解決方法。 我使用Google找到任何可以幫助我解決這個問題,我最終找到StackOverflow上Coded ui test - Select an item from a combobox without using mouse coordinates

這個問題,我儘量選擇在下拉菜單中的同一項目不使用HtmlComboBox元素「的SelectedItem」屬性。 我嘗試使用鍵盤在下拉框中選擇元素,首先,我請單擊下拉,然後我使用向下鍵和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); 
    } 

在我的案例我想選擇的元素是第三個元素,所以我下降了2次,然後按下我想要選擇的元素。

這種解決方法並不是很好,因爲如果元素更改位置,我將選擇worng一個!但這是我獲得測試不會成爲股票的唯一途徑!

我想知道是否有人有類似的問題。因爲對我來說,這看起來像編碼UI測試引擎中的一個錯誤,在警報未關閉的情況下,它不會讓測試存儲。