gpt4 book ai didi

c# - TestStack.White 为什么我可以用Application.GetWindows 找到一个窗口但用.GetWindow 找不到?

转载 作者:太空宇宙 更新时间:2023-11-03 12:19:39 24 4
gpt4 key购买 nike

编辑:在形成这个问题时,我没有注意到目标窗口是模态窗口,所以我尝试的方法是错误的。我应该一直使用 GetModal,而不是 GetWindow。留在这里作为 future 旅行者的潜在引用

我正在尝试使用 TestStack.White 为我继承的大型 WPF 应用程序编写一些测试;我有一个创建子窗口的情况,我需要获取对它的引用。如果我遍历对 Application.GetWindows 的调用结果,我可以找到它,但我无法用我能想象的任何 Application.GetWindow 化身找到它。

这在以下示例中进行了说明(其中名称是一个字符串)。该窗口是在 foreach 循环中找到的(只要我在迭代之前让线程休眠一秒钟,以便在单击其他内容后让窗口有时间创建。)老实说,这个练习的重点只是为了获得摆脱这种 Thread.Sleep 代码味道,所以我想使用 GetWindow 及其内置等待。

        Thread.Sleep(1000);

foreach (Window window in app.GetWindows())
{
if (window.AutomationElement.Current.Name == name)
{
Assert.AreEqual(window.Title, name); // passes.. they match
Assert.AreEqual(window.AutomationElement.Current.Name, name); // passes.. they match
var aIdCheck = window.AutomationElement.Current.AutomationId; // empty string
}
}

try // this fails.. (after 30s)
{
var testGetWindow = app.GetWindow(name);
}
catch (Exception ex) { }

try // this fails too... (after 5s)
{
var testGetWindow = app.GetWindow(SearchCriteria.ByNativeProperty(AutomationElement.NameProperty, name), InitializeOption.NoCache);
}
catch (Exception ex) {}

try // you guessed it.. fail..
{
var testGetWindow = app.GetWindow(SearchCriteria.ByText(name), InitializeOption.NoCache);
}
catch (Exception ex) {}

最佳答案

试试这个:

var window = Retry.For(
() => parent.GetWindows().First(x => x.Title.Contains(name)),
TimeSpan.FromSeconds(5));

如果它有效,我认为问题是有多个进程/窗口以您要查找的名称运行。您的 foreach 循环之所以有效,是因为它不关心并且只是找到第一个,但是在这种情况下 GetWindow() 方法会中断。

关于c# - TestStack.White 为什么我可以用Application.GetWindows 找到一个窗口但用.GetWindow 找不到?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48001352/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com