我需要自动化第三方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告诉我图像在屏幕外。但是,如果我手动执行这些操作,它可以完美地工作,并且在检查中此图像不在屏幕外。
如何刷新这些元素或清除窗口缓存?
答案 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)