- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
编辑:在形成这个问题时,我没有注意到目标窗口是模态窗口,所以我尝试的方法是错误的。我应该一直使用 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/
我无法将控件拖动到另一个控件。我已经成功地选择了两个控件,但是当我尝试使用时: Mouse.Instance.Location = dragControl.ClickablePoint; Mouse.
我试图在启动后从主应用程序中获取 2 个编辑框。有时 window.GetMultiple() 只返回 1 个编辑框。有什么方法可以等待元素出现吗? 编辑框没有自动化 ID 或文本。 最佳答案 您可以
我想知道我可以使用 TestStack在应用程序上执行自动化过程。所以我写了一个简单的代码来统计目标应用程序的所有窗口。 首先我在示例应用程序 (WinForm (.net)) 上对其进行了测试,它运
我想打开一个 Windows 应用程序,然后按工具栏中的“保存屏幕”按钮: 使用 Visual Studio 中的 Spy++,我能够获得此工具栏的以下属性: 根据以上信息,我尝试了这个: Appli
我正在使用包装器库 TestStack.White 以更简单的方式深入了解 Windows 自动化。我试图自动化一种在游戏启动器上输入用户名的方法。我不知道文本框名称,所以我尝试使用 SearchCr
我有一个与模态窗口相关的问题。 在我正在自动化的应用程序中,如果用户有一些数据,模式窗口将打开,但如果没有,则它不会打开。我们如何放置“if 语句”,例如,如果模态窗口存在,则执行一些工作,否则跳过。
我正在使用 Visual Studio 2010,我得到了 TestStack.White通过 NuGet (我得到了版本 0.10.3.118 )。 问题是,我的测试单击了一个按钮,该按钮触发了超过
我正在寻找一种解决方案来从命令行开始我的测试。 我在 VisualStudio2017 中为我的 .NET 解决方案创建了一个 UnitTest Procjet。 将 TestStack.White
我正在尝试单击外部 Windows 应用程序上的按钮。下面的代码成功地找到了元素,使父窗口成为焦点,然后“手动”点击按钮 这没问题... Process tProcess = Process.GetP
我正在学习使用 White by TestStack 来自动化 Windows 应用程序。我正在尝试通过路径为“文件>>项目>>新建...”的应用程序菜单项来自动创建新项目到目前为止,我已经获得了执行
我有一个使用 Visual Studio 2012 Professional 在 C++ MFC 中编写的应用程序。目前我想使用用 C# 编写的 TestStack.White 框架创建一些自动化脚本
我有 3-4 个 Windows 应用程序在名称 “WorkflowActionProcessor” 下运行,我想循环并模拟每个应用程序的按钮点击。 为了模拟点击,我使用 teststack.whit
如何在 Teststack White 中实现动态超时?前任。我试图在网络浏览器上的回发事件后定位一个元素。因此在元素加载或页面可能超时之前会有延迟。对于这两种情况,使用 Thread.Sleep 的
我制作了一个 WPF 应用程序,并使用 teststack.white 进行了一些自动化测试。他们有关于如何将 Windows 中的控件映射到其框架的文档,但我在任何地方都没有看到 TextBlock
我正在使用 Teststack.White 来启动 GUI 并与之交互。模型隐藏在外观后面,允许将测试模拟注入(inject)到 GUI 中。 GUI 成功加载测试模拟和 Teststack。Whit
我正在尝试使用 TestStack.White 在我的 WPF 应用程序中将密码写入 PasswordBox 我可以使用 找到 PasswordBox private TextBox Password
所以我正在尝试测试 UI WPF 应用程序。我正在使用 TestStack.White 框架进行测试。 UI 具有自定义控件 DragDropItemsControl。该控件继承自 ItemsCont
我正在尝试通过 Visual Studio 中的包管理器控制台使用 NuGet 安装 TestStack.White,但是当我在包管理器控制台中输入“Install-Package TestStack
我有一个使用 DataGrid 来显示联系人列表的应用程序。 8 列,其中 4 列代表客户信息(字符串),另外 4 列是复选框(出于测试目的,我将全部设置为 true)。 使用 TestStack.W
在测试虚拟化面板时,我需要设置 VirtualizingPanel.IsVirtualizing 属性,以便 Teststack.White 可以像与非虚拟化面板一样与它们交互。 这对我很有帮助,尤其
我是一名优秀的程序员,十分优秀!