2012-02-17 66 views
2

我有一個簡單的wpf應用程序,它有一個按鈕,可以在單擊時增加一個值。我也有一個返回最新值的函數。默認值是5.我還在testcomplete中有一個UI測試,點擊按鈕3次(所以8)。我需要調用.Net函數來獲取此值並將其斷言。以下是我的測試代碼。在TestComplete中調用UI測試實例的.Net功能

經過一番搜索,我找到了CLRbridge的細節並實現了它。但是,正如你可以在下面看到的,UI測試實例和我在這個函數中實現的實例是不同的。所以,函數返回5.

我的問題是,我如何從testcomplete加載的同一個實例調用該函數。還是我完全錯誤的方式呢?如果我嘗試了腳本和UI測試,那麼沒有任何工作。我已經嘗試了直接實例和調用appdomain,都似乎沒有工作。

注意:我明白我可以在UI控件中顯示值並驗證控件。但是,我特意嘗試了一下我們在項目中需要的更復雜的測試功能。

function Test2() 
{ 
    var Increment; 
    Increment = 0; 
    //Runs the "TCompTest" tested application. 
    TestedApps.TCompTest.Run(); 
    //Clicks the 'button1' button. 
    Aliases.TCompTest.HwndSource_MainWindow.MainWindow.Grid.button1.ClickButton(); 
    //Clicks the 'button1' button. 
    Aliases.TCompTest.HwndSource_MainWindow.MainWindow.Grid.button1.ClickButton(); 
    //Clicks the 'button1' button. 
    Aliases.TCompTest.HwndSource_MainWindow.MainWindow.Grid.button1.ClickButton(); 
    //Increment = dotNET.Incrementer.Incr1.zctor().IntValue(true); 

Increment = dotNET.Incrementer.Incr1.zctor().IntValue(true); 

**OR** 

Increment = Sys.Process("TCompTest").AppDomain("TCompTest.exe").dotNET.Incrementer.Incr1.zctor().IntValue(true) 

// if(Increment == 8) 
// {//Posts an information message to the test log. 
    Log.Message(Increment); 
// } 
    //Closes the 'HwndSource_MainWindow' window. 
    Aliases.TCompTest.HwndSource_MainWindow.Close(); 
} 

回答

3

應該可以做你從TestComplete需要什麼。但首先,爲避免誤解,讓我解釋一下你嘗試過的方法的問題:

  1. 通過「DOTNET」對象尋址的一類。 當你這樣做時,TestComplete在它的服務進程中初始化.NET,將指定的程序集加載到它中,並且使用加載到TestComplete的AppDomain(雖然生活在一個單獨的進程中)的此程序集的類工作。這意味着您的程序集的這個實例與您的測試應用程序無關。所以,你不能通過dotNET對象訪問你的應用程序的數據。

  2. 通過測試應用程序的AppDomain尋址Incrementer程序集。 好的,在這種情況下,您更接近解決方案 - 您可以使用測試應用程序的AppDomain,因此您可以訪問應用程序的數據。但是,在你的代碼中,你創建了一個Incr1類的新實例(通過調用zctor)。這意味着新的類實例將在構造函數中初始化其計數器,並且它將是5.這是您在代碼中獲得的值。

所以,正確的做法:

除非包含當前計數器值Incr1類的計數器字段是一個靜態字段,你需要解決Incr1類的現有對象,以獲取該屬性的當前值,而不是創建一個新的類實例。實際的實現將取決於您在應用程序中存儲Incr1類實例引用的位置。讓我們假設,你存儲在主窗口對象的櫃檯物業參考:

// Creating an instance of the class somewhere in your code 
MainWindow.Counter = new Incr1(); 

// ...  

// And this line of code is in the button click handler 
MainWindow.Counter.Increment(); 

在所描述的情況,你就可以在你的TestComplete的腳本來獲取當前計數器值如下:

var MainWnd = Aliases.TCompTest.HwndSource_MainWindow.MainWindow; 
    Log.Message(MainWnd.Counter.IntValue(true)); 

如果您的設置不同,請描述它 - 我會盡力幫助。

+0

感謝您的明確解釋。我不敢肯定我正在從一個不同的實例中獲取價值,這個價值將會吸引它自己。 Mianly因爲我無法找到訪問測試創建的實例的方法。然而,您的建議可行,因爲它是wpf,綁定會創建incr1的實例。 _XAML_是這樣的:'

+0

順便說一句,我剛剛使用你的建議,我可以從MainWindow訪問Incr1實例,並可以獲取更新的值。這工作正常。我剛從MainWindow.cs中訪問DataContext對象,並將該值設置爲一個屬性並訪問它。現在它工作正常。謝謝 ! – praskris 2012-02-21 15:14:25