2

我有一个简单的 wpf 应用程序,它有一个在点击时增加值的按钮。我还有一个返回最新值的函数。默认值为 5。我在 testcomplete 中也有一个 UI 测试,它点击了 3 次按钮(所以 8)。我需要调用 .Net 函数来获取这个值并断言它。下面是我的测试代码。

经过一番搜索,我找出了 CLRbridge 的详细信息并实施了它。但是,正如您在下面看到的,UI 测试实例和我在其上调用函数的实例是不同的。因此,该函数返回 5。

我的问题是,如何从 testcomplete 加载的同一个实例中调用该函数。还是我为此走错了路?我用 if..then 尝试了脚本和 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();
}
4

1 回答 1

3

应该可以从 TestComplete 做你需要的事情。但首先,为避免误解,让我解释一下您尝试的方法存在的问题:

  1. 通过“dotNET”对象寻址一个类。当您执行此操作时,TestComplete 在其服务进程中初始化 .NET,将指定的程序集加载到其中,并使用加载到 TestComplete 的 AppDomain 的该程序集的类(尽管存在于单独的进程中)。这意味着您的程序集的这个实例与您测试的应用程序无关。因此,您无法通过 dotNET 对象访问应用程序的数据。

  2. 通过测试应用程序的 AppDomain 寻址 Incrementer 程序集。好的,在这种情况下,您更接近解决方案 - 您使用测试应用程序的 AppDomain,因此您可以访问应用程序的数据。但是,在您的代码中,您创建了一个 Incr1 类的新实例(通过调用 zctor)。这意味着新的类实例将在构造函数中初始化其计数器,它将为 5。这就是您在代码中获得的值。

所以,正确的做法:

除非包含当前计数器值的 Incr1 类的计数器字段是静态字段,否则您需要寻址 Incr1 类的现有对象以获取属性的当前值,而不是创建新的类实例。实际实现将取决于您在应用程序中存储 Incr1 类实例引用的位置。假设,您将引用存储在 MainWindow 对象的 Counter 属性中:

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

如果您的设置不同,请描述它 - 我会尽力提供相应的帮助。

于 2012-02-19T06:49:17.323 回答