如何刷新CodedUI中的UIMap对象

时间:2012-06-01 10:38:59

标签: mstest ui-automation coded-ui-tests

我可以刷新UIMap对象吗? 问题是我改变了UI元素的位置,然后我再次尝试获取AutomationElement,我得到AutomationELment但它的BoundingRectanle是无限的。 所以我假设它没有刷新UIMap对象。

有人可以帮我吗?

3 个答案:

答案 0 :(得分:1)

在测试的UIMaps部分,您可能会遇到以下情况:

private MyTestUIMap uiMap;
public MyTestUImap UIMap
{
    get
    {
        if (this.uiMap == null)
        {
            this.uiMap = new MyTestUIMap();
        }
        return this.uiMap;
    }
}

这将在第一次使用时为UIMap对象创建单例。要刷新它,可以将uiMap对象设置为null,以便在下次使用时再次重新初始化:

public void RefreshUIMap() 
{
    this.uiMap = null;
}

每当您想刷新UIMap(获取新实例)时,请调用此RefreshUIMap方法。

修改
再次阅读您的问题后,我认为您想刷新UIMap中的单个Object而不是UIMap对象实例。在MyTestUIMap.uitest中选择对象(假设您已安装FeaturePack 2),从对象属性中选择Search Configuration并添加配置AlwaysSearch。每当在脚本中使用该对象时,testrunner将在屏幕上再次搜索它,而不是试图从缓冲区中获取它。

答案 1 :(得分:0)

Find()上调用UITestControl方法应该执行或重复搜索。

通常不会显式调用Find()方法,而是使用控件隐式调用它。在控件上调用Find()应该重新评估搜索,并且还具有清除任何子控件的效果。

答案 2 :(得分:-1)

将SearchConfiguration设置为“始终搜索”解决了我的问题,即未使用更新的值刷新单个控件会导致测试失败。

this.UIMap.UIItemWindow2.UIItemWindow11.SearchConfigurations.Add(SearchConfiguration.AlwaysSearch);