【问题标题】:Specflow getting modal window takes a lot of timeSpecflow 获取模态窗口需要很多时间
【发布时间】:2018-06-05 13:53:51
【问题描述】:

我目前正在为 WPF 应用程序编写自动测试,但遇到了一个问题,即获取不存在的窗口需要很长时间(每次自动测试至少需要 1 分钟,这是不可接受的)。

我有一个有时会打开的文件保存对话框窗口。为了不打扰其他场景,我必须在拆卸时关闭此类窗口。

问题在于,如果这样的窗口不存在(例如它已关闭),则在每种情况下尝试获取它至少需要一分钟。有没有可能让它表现得更好?

public Window SavePrintOutputWindow
    {
        get
        {
            try
            {
                var printingScreen = MainScreen.ScreenWindow.ModalWindow("Printing");
                var saveOutputWindow = printingScreen.ModalWindow("Save Print Output As");
                return saveOutputWindow;
            }
            catch (Exception e)
            {

                return null;
            }
        }
    }

【问题讨论】:

  • 那么在您发布的代码中花费了多少时间?找窗户?捕捉到异常?
  • 最好检查 if (object != null) 而不是 try catch 这样做
  • @stuartd 试图找到“打印”窗口的行。

标签: c# wpf automated-tests white-framework teststack


【解决方案1】:

使用Get<WindowedAppScreen>("Printing", InitializeOption.NoCache) 获取窗口也很慢。 使用来自here 的信息解决了它。

不需要测量确切的性能,但它对我来说已经足够快了。

现在我的代码如下所示:

[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
public Window SavePrintOutputWindow
{
    get
    {
        try
        {
            IntPtr hWnd = FindWindow(null, "Save Print Output As");
            if (hWnd == IntPtr.Zero)
            {
                 return null;
            }
            var printingScreen = MainScreen.ScreenWindow.ModalWindow("Printing");
            var saveOutputWindow = printingScreen.ModalWindow("Save Print Output As");
            return saveOutputWindow;
        }
        catch
        {
            return null;
        }
    }
}

希望对某人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    • 2018-05-21
    • 1970-01-01
    • 1970-01-01
    • 2014-09-21
    相关资源
    最近更新 更多