2016-08-03 67 views
-1

我已谷歌搜索和綁定和Yahoo'd甚至Dogpiled。我發現主要是Python,PHP和Ruby不適用。只有一個項目出現(從2012年),但它沒有答案:unit test fails in r# but passes in mstestC#MSTEST編碼的UI自動測試失敗,雖然完全相同的手動測試通過

我有兩個測試,完全按照記錄工作。首先,當測試到達Submit按鈕時,該應用程序表示該頁面未準備好提交,並且Submit按鈕保持禁用狀態。另一方面,提交按鈕已啓用,但該頁面什麼都不做。當我使用相同的數據(或使用不同的數據)手動(使用鍵盤和鼠標)執行完全相同的操作時,兩個頁面上的提交按鈕都可以工作,並且兩個頁面都可以處理。

我已經運行測試點提交按鈕被點擊,但沒有任何反應,當我手動點擊它們,無論是。我已經從一個領域標籤到下一個領域,認爲它可能是一個不開火的事件,但不是。

這是我找到的:如果自動打開頁面,提交按鈕將不起作用。如果自動輸入或選擇頁面上的一個項目,提交按鈕將不起作用。但是:如果我在頁面打開之前運行自動化點,那麼如果我點擊打開頁面並手動鍵盤和鼠標條目,然後手動鼠標單擊提交按鈕,它將工作。

測試記錄在MTM中,並導入到Visual Studio 2012中。我嘗試重新導入它們,並使用Visual Studio手動記錄了這些步驟。

我們現在認爲測試軟件(MSTest)和頁面中的JavaScript之間存在一些意想不到的相互作用。我們編寫了(編碼UI)應用程序中的另外11個頁面。所有11個應用程序頁面使用相同的基本體系結構和相同的控件。我們測試人員認爲JavaScript可能會被破壞(缺少大括號,缺少一對括號,缺少分號,在錯誤的地方出現分行,某些事情)。

這些測試絕對沒有任何獨特之處。他們是我編寫過的最簡單的測試。其中一個只有四個輸入字段。我沒有手動編碼任何東西; UIMap.cs文件是空的。這些都在基於UIMap.UITest文件的UIMap.Designer.cs中。

這是我的編碼的UI測試類的顯著部分(可變設置和的try-catch邏輯忽略):

try 
{ 
    User.OpenBrowser(TestContext); 
    this.UIMap.ClickFeesButtonInSecondaryMenu(); 
    this.UIMap.ClickAddPaymentButton(); 
    this.UIMap.OpenYearDropdownAndSelect2016(); 
    this.UIMap.Type1234InCheckNumber(); 
    this.UIMap.Type275InTotalAmount(); 
    this.UIMap.SelectBusinessFees(); 
    this.UIMap.SelectInstructorFees(); 
    this.UIMap.ClickSubmitButton(); 
    User.CloseBrowser(TestContext); 
} 
catch . . . . 

這是我的UIMap.Designer.cs的一部分:

public void ClickFeesButtonInSecondaryMenu() 
{ 
    #region Variable Declarations 
    HtmlHyperlink uIFeesHyperlink = this.UIInternetExplorerWindow.UIDocument.UIFeesHyperlink; 
    #endregion 

    // Click 'Fees' link 
    Mouse.Click(uIFeesHyperlink, new Point(22, 21)); 
} 

public void ClickAddPaymentButton() 
{ 
    #region Variable Declarations 
    HtmlHyperlink uIAddPaymentHyperlink = this.UIInternetExplorerWindow.UIDocument1.UIAddPaperPaymentHyperlink; 
    #endregion 

    // Click 'Add Payment' link 
    Mouse.Click(uIAddPaymentHyperlink, new Point(84, 15)); 
} 

    public void OpenYearDropdownAndSelect2016() 
    { 
     #region Variable Declarations 
     HtmlHyperlink uIItem2017Hyperlink = this.UIFeeInternetExplorerWindow.UIFeeDocument.UIItem2017YearYearPane.UIItem2017Hyperlink; 
     HtmlDiv uIItem2016Pane = this.UIFeeInternetExplorerWindow.UIFeeDocument.UIItem2016Pane; 
     #endregion 

     // Click '2017' link 
     Mouse.Click(uIItem2017Hyperlink, new Point(149, 20)); 

     // Click '2016' pane 
     Mouse.Click(uIItem2016Pane, new Point(124, 3)); 
    } 

    public void Type1234InCheckNumber() 
    { 
     #region Variable Declarations 
     HtmlEdit uICheckNumberEdit = this.UIFeeInternetExplorerWindow.UIFeeDocument1.UICheckNumberEdit; 
     #endregion 

     // Type '1234' in 'Check Number' text box 
     uICheckNumberEdit.Text = this.Type1234InCheckNumberParams.UICheckNumberEditText; 
    } 

。 。 。依此類推,直到你到達。 。 。

public void ClickSubmitButton() 
{ 
    #region Variable Declarations 
    HtmlInputButton uISubmitButton = this.UIFeeInternetExplorerWindow.UIFeeDocument1.UISubmitButton; 
    #endregion 

    // Click 'Submit' button 
    Mouse.Click(uISubmitButton, new Point(27, 17)); 
} 

我只一直在做C#MSTEST編碼的UI僅僅過了一年,但我在這裏有萬噸以上的經驗比我有其他三個自動化工程師,而這個問題是新的全部。我們已經看過我們能想到的所有東西,但沒有快樂。有沒有人看過這個?什麼導致這種行爲?最重要的是,有沒有修復?

+0

該按鈕是默認啓用還是啓用時填寫字段?換句話說:當頁面加載時,你可以立即點擊那個按鈕? – rene

+0

在所有頁面編輯通過之前,在一個頁面上,此按鈕會被禁用。要明確,測試運行時總是禁用。更清楚的是,問題是測試運行時總是禁用它。在另一頁上,只要頁面加載就會啓用它。它什麼都不做。 – Barniferous

+0

您可以嘗試在'Mouse.Click'之前執行uisubmitButton.SetFocus();' – rene

回答

2

因爲你提到你認爲JS可能被破壞,這導致我相信,點擊按鈕後,某種AJAX可能會在後臺進行。如果是這種情況,請參閱this question以查看它是否適用於您的案件。

+0

我只是回到這裏發佈這個項目,作爲我自己的答案。對於任何好奇的人來說,在app.config的appSettings部分放上''。有誰知道WebWaitForReadyLevel的其他值是做什麼的?我用Google搜索了一下,所有我發現的值是3。謝謝@rene和@MPavlak – Barniferous

+0

我終於找到了[關於WebWaitForReadyLevel的鏈接](https://social.msdn.microsoft.com/Forums/vstudio/en-US/3f3f2d2b-26f2-444d-9ef7-08bd591d60f2/questions-about -setting-webwaitforreadylevel?forum = vstest)它有我見過的最多的信息。 – Barniferous

相關問題