4

我需要自动化 3rd 方 WPF 应用程序。我使用 TestStack/White。此应用程序具有由图像呈现的菜单栏。在某些操作菜单发生变化后。那里提出了新的图像。当我想点击新图片时:

Window mainWindow = application.GetWindow("Main window", InitializeOption.NoCache);
Image newTask = mainWindow.Get<Image>(SearchCriteria.ByControlType(ControlType.Image).AndIndex(2));
newTask.Click();

我得到例外:

TestStack.White.AutomationException:无法对图像执行操作。AutomationId:, Name:, ControlType:image, FrameworkId:WPF, 元素在屏幕外。

我将 Microsoft Inspect 用于研究元素。当我开始测试时,Inspect 显示图像不在屏幕上。但是,如果我手动执行这些操作,它会完美运行,并且在 Inspect 中此图像不会在屏幕外。

如何刷新这些元素或清除窗口缓存?

4

3 回答 3

0

Window 对象有 ReInitialize 和 ReloadIfCached 方法。试试这些看看是否有变化。

您确定 AndIndex(2) 在那种特定情况下是正确的元素吗?

尝试使用 GetMultiple 并迭代集合以查看您实际拥有哪些图像以及哪些不是 Offscreen。

使用 White 实现 WPF 自动化非常困难。试试 Telerik 测试框架,White 可能是支持框架。这样就容易多了。

于 2015-03-24T15:18:12.950 回答
0

这可能是焦点问题,在获取图像之前尝试使用它:

mainWindow.Focus(DisplayState.Maximized);
于 2016-10-12T20:39:16.923 回答
-1

我不认为缓存是这里的问题。你得到了mainWindowwith InitializeOption.NoCache。在非缓存模式下,可以按需找到控件。所以我假设缓存是自动刷新的。(https://github.com/TestStack/White/blob/master/src/TestStack.White/Factory/InitializeOption.cs

可能您要点击的元素的索引不是 2。您是否尝试过添加显式等待?听起来您只尝试添加隐式等待。(https://github.com/TestStack/TestStack.docs/blob/master/_source/White/Advanced%20Topics/Waiting.md

于 2016-03-04T15:42:56.517 回答