编码 UI - 当 IsVisible、Exists、TryGetClickablePoint 等都 return 为真时我看不到控件时,我们如何找到是否存在某些东西?

Coded UI - How do we find if something exists when IsVisible, Exists, TryGetClickablePoint etc all return true when I can't see the control?

我正在测试一个 WPF 应用程序,我不知道它的确切工作原理,但我发现有很多实例需要查找是否显示控件。 Stack Overflow 和 MS 论坛等上关于此的所有传统答案都说使用以下之一...

可见, 存在, 尝试获取可点击点, 状态(例如 OffScreen

问题是对于这个系统,许多控件 return 对于所有这些控件都是正确的,即使控件是看不见的!它们还 return 一个坐标为 (-1, -1, -1, -1) 的点,无论控件是否可见。

我唯一成功的是最后使用 try catch。我尝试单击控件,如果失败,我将进入 catch 块。不过,这需要 60 秒才能超时,而且我遇到间歇性问题 运行 10 次中有 9 次。也许经常使用 try catch 会导致性能问题。

当所有标准方法都失败时,是否有一种方法确实有效?我注意到很多其他提出这些问题的人也在测试 WPF。 WPF 开发人员是否正在做一些事情来隐藏控件,使 CodedUI 认为它们仍然存在并可见等。它们只是在某些东西后面吗?

非常感谢。

解决方案有两个。首先,我必须找到该元素,但我记录的步骤无法正常工作。该元素在被测系统 WPF (XAML) 中埋得太深。其次,我必须证明我已经找到该元素,为此我不能使用 TryGetClickablePoint、Exists、Top 或 Width。 None 似乎完全适合我的元素。我不得不使用状态。

    public void Assert_MyElementShown()
    {
        #region Variable Declarations
        WpfCustom uISurfaceCustom = this.UISysUnderTestClientShWindow.UIItemCustom1.UISurfaceCustom;
        WpfCustom uIYAxisLabelsCustom = new WpfCustom();
        #endregion

        //Find the Element using it's Container and SearchProperties
        uIYAxisLabelsCustom.Container = uISurfaceCustom;
        uIYAxisLabelsCustom.SearchProperties[WpfControl.PropertyNames.ClassName] = "Uia.AxisLabelControl";
        uIYAxisLabelsCustom.SearchProperties[WpfControl.PropertyNames.AutomationId] = "YAxisLabels";

        //Use the State to find if it's on screen or not
        var state = uIYAxisLabelsCustom.State;

        if (state == Microsoft.VisualStudio.TestTools.UITest.Extension.ControlStates.Default)
        {
            //Element is visible, do stuff here!
        }
        else if (state == Microsoft.VisualStudio.TestTools.UITest.Extension.ControlStates.Offscreen)
        {
            //The control may exist, it may have location on screen and may even 
            //appear to be clickable according to coded ui framework but is is NOT
            //shown on the screen. 
        }

}

您可以为您的应用程序尝试这种方法..如果控件属性显示为 true 比我们可以选择高度和 width.Means 如果控件在 UI 中不可见,但仍然全部属性显示为 true 而不是检查控件高度和宽度必须在 -ve number.Than 中,我们可以保持像

这样的断言

如果control.height<0 在 UI

中不可见