1

我想知道我可以使用TestStack对应用程序进行自动化处理。所以我写了一个简单的代码来计算目标应用程序的所有窗口。

首先,我在示例应用程序(WinForm (.net))上对其进行了测试,它运行良好(返回 1 作为表单计数)。

其次,我在我的目标应用程序上对其进行了测试,但它没有返回任何窗口(返回 0 作为表单计数)。

我在按钮下的代码:

TestStack.White.Application application = TestStack.White.Application.Launch(@"C:\target.exe");

var windows = application.GetWindows();

foreach (var window in windows)
{
    MessageBox.Show(window.Title);
}

.....................................在此处输入图像描述

附加信息:

  • 当我单击按钮时,它可以成功地午餐我的目标应用程序。

  • 我不知道我的应用程序编程技术,我猜它是 c++ 和 QT 但也许它是不同的!

  • 我看了application变量。结果是:

在此处输入图像描述

问题:

  • 哪些原因会导致此问题?
  • 我是否应该切换到另一种方式 TestStack 对这种应用程序进行自动化处理(例如使用低级 Windows API 和消息或....)?
  • 我是 TestStack 的大佬,我有什么错误吗?
  • 你有什么建议???

谢谢...


编辑 1

  • 目标应用程序窗口 ClassName:“Qt5QWindowIcon”(我使用 SpyUI 来获取这个)
4

2 回答 2

3

我根据评论中的@Mikez通知发现了问题。

问题的原因是>>

当我运行目标应用程序时,它会用一个新进程改变自己的进程并且我丢失了它?

解决方案: 现在我把我的代码改成了这个,它运行良好;)

 var myFirstTargetApp =TestStack.White.Application.Launch(@"c:\target.exe");
 myFirstTargetApp.Process.WaitForExit();

 TestStack.White.Application application = TestStack.White.Application.Attach("target");
  var windows = application.GetWindows();

  MessageBox.Show(windows.Count.ToString());  // << now my messagebox show:  1
于 2014-10-29T01:09:14.890 回答
1

你有没有尝试过:

TestStack.White.Application application = TestStack.White.Application.AttachOrLaunch("target");

节省一些代码行。

于 2015-02-19T09:59:49.097 回答