【问题标题】:How to find Window by variable title using TestStack.White framework?如何使用 TestStack.White 框架按变量标题查找窗口?
【发布时间】:2014-12-26 13:15:16
【问题描述】:

我正在使用 TestStack.White 框架在 MS Word 2013 中自动打开新文档。

我正在打开 Microsoft Word 应用程序:

   Application application = Application.Launch("winword.exe");

之后,我试图通过部分标题获取窗口:

   Window window = application.GetWindow("Word", InitializeOption.NoCache);

但是它会抛出一个异常,说没有这样的窗口。

窗口标题为:Document1 - Word

问题是:如何通过部分标题获取窗口,同时考虑到标题每次都在变化:“Document2 - Word”、“Document3 - Word”等。

也试过 *Word 但看起来这个函数不支持通配符

如果我调用: 列表窗口 = application.GetWindows(); 启动应用程序后,windows 列表为空。

提前致谢, 奥斯塔普

【问题讨论】:

    标签: ui-automation office-automation white-framework gui-test-framework


    【解决方案1】:

    您可以使用EnumWindows 查找所有打开的窗口。

    在该回调中,您将获得一个窗口句柄,然后您可以使用GetWindowTextLengthGetWindowText 联系我们

    这将让您决定您想要的窗口的窗口句柄。从那里您可以使用GetWindowThreadProcessId 检索word 文档的进程ID。

    最后,您可以使用 Application.Start() 创建一个 TestStack White 应用程序

    【讨论】:

      【解决方案2】:

      看起来打开窗口需要一些明显的时间。 GUI 测试框架通常具有 Wait() 之类的功能,以确保窗口已经创建/可见/启用。我不是 Teststack.White 的专家。也许这份文件可能会有所帮助:http://teststackwhite.readthedocs.io/en/latest/AdvancedTopics/Waiting/

      【讨论】:

      • 等待没有帮助,30 秒后未找到窗口。尝试按屏幕上 100% 的标题进行搜索。还尝试在窗口搜索前休眠 10 秒。
      • 好的,是微软。 :) 使用 COM 互操作接口和 Word 对象模型怎么样? msdn.microsoft.com/en-us/library/kw65a0we.aspx
      • 感谢您的回答。 Microsoft COM 适用于本机控件/工作流。在我的例子中,我们有一个 MS Word 插件,它可以挂钩和替换 MS 对话框/控件等。需要验证它是否会处理这些控件
      【解决方案3】:
      public static Window GetWindowBySubstring(this Application app, string titleSubString)
      {
          return app.GetWindows().FirstOrDefault(w => w.Title.Contains(titleSubString));
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-08
        • 2017-05-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多