屏幕元素测试堆栈白色

时间:2015-03-10 12:38:51

标签: c# ui-automation white

我需要自动化第三方WPF应用程序。我用 TestStack /白色。此应用程序具有由图像显示的菜单栏。一些动作后菜单正在改变。有新的图像。当我想点击新图片时:

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

我得到例外:

  

TestStack.White.AutomationException:无法对Image执行操作。   AutomationId:,Name:,ControlType:image,FrameworkId:WPF,element是   屏幕外。

我将Microsoft Inspect用于研究元素。 当我开始测试时,Inspect告诉我图像在屏幕外。但是,如果我手动执行这些操作,它可以完美地工作,并且在检查中此图像不在屏幕外。

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

3 个答案:

答案 0 :(得分:0)

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

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

尝试使用GetMultiple并迭代集合,以查看实际拥有的图像以及不在屏幕外的图像。

使用White的WPF自动化非常困难。试试Telerik Testing Framework和White可以支持框架。这种方式要容易得多。

答案 1 :(得分:0)

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

mainWindow.Focus(DisplayState.Maximized);

答案 2 :(得分:-1)

我认为缓存不是问题所在。您将获得mainWindow 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