【问题标题】:"control.Exists" within a loop works for first time and not for second time in coded ui循环中的“control.Exists”第一次工作,而不是第二次在编码的 ui 中工作
【发布时间】:2015-02-16 00:50:39
【问题描述】:

考虑代码

for(i = 0; i < 5; i++)
{
    if(control.Exists)
    {
        mouse.Click(button);
    }
}

在这里,控件是一个弹出窗口。第一次执行时,control.Exists = true,第二次执行时为 false,尽管控件存在。为什么呢?如何让它成为现实?

提前致谢。

【问题讨论】:

    标签: coded-ui-tests


    【解决方案1】:

    程序经常绘制一个控件的另一个副本,它看起来与眼睛相同但又不同。因此,第二次循环 control 指的是旧版本的控件,但它不再存在。

    你的代码可能相当于

    for(i = 0; i < 5; i++)
    {
        if(top.middle.control.Exists)
        {
            mouse.Click(top.middle.button);
        }
    }
    

    UI Control 层次结构中可能有更多级别,但此处解释三个就足够了。

    正常的解决方法是在使用之前找到控件的新副本。所以把代码改成

    for(i = 0; i < 5; i++)
    {
        top.middle.Find();
        if(top.middle.control.Exists)
        {
            mouse.Click(top.middle.button);
        }
    }
    

    如果这不起作用,因为middle 也不可用,则使用top.Find();

    要详细了解哪些控件可用或不可用,请尝试这样的代码并观察屏幕的哪些部分以蓝色框突出显示。

    for(i = 0; i < 5; i++)
    {
        top.DrawHighLight();
        top.middle.DrawHighLight();
        top.middle.control.DrawHighLight();
        if(top.middle.control.Exists)
        {
            mouse.Click(top.middle.button);
        }
    }
    

    【讨论】:

      【解决方案2】:

      改用 TryFind(),并设置 searchTimeout。

      【讨论】:

        【解决方案3】:

        您可以使用 Inspect/UISpy 来检查控件的 RuntimeId。我认为这是 AdrianHHH 的回复中描述的控制版本。

        但是,最让我困惑的是,我可以在第一次使用找到的控件,在下面的循环中,虽然我的应用程序被重新启动了。

        【讨论】:

          猜你喜欢
          • 2011-11-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-02-18
          • 1970-01-01
          • 1970-01-01
          • 2011-05-25
          • 1970-01-01
          相关资源
          最近更新 更多