编码的UI测试向下投射不工作

时间:2012-12-06 10:50:14

标签: c# automation coded-ui-tests

我一直在尝试将泛型引入我们的自动化代码,因此我尝试将WpfControl转换为泛型类型T,其中T被约束为WpfControl类型。

return control as T;

T将永远是WpfControl的子代,但是当我将类型为WpfControl的控件转换为泛型类型时,它返回null。我还尝试将控制转换为确切的子类型,例如:

var childControl = control as WpfTabList;

这仍然会返回null。有人遇到过任何类似的问题吗?

请参阅此WpfControl Class

2 个答案:

答案 0 :(得分:0)

一些建议:

首先,在通用方法中,请使用geteric类型规范。像

public T GetControl<T>(...) where T : WpfControl

在你的假设和实施中存在误解  您试图将WpfControlWpfTabList匹配,这在子控件不是TabList的情况下是错误的。

答案 1 :(得分:0)

这绝对有效。我的github上有一整套这些。

您可以添加更多显示控件设置的代码吗?

以下是一些摘录,以显示这可能是什么样的。

public static T Find<T>(this UITestControl parent) where T : UITestControl, new()
    {
        return new T() { Container = parent };
    }

public static IEnumerable<T> FindAll<T>(this UITestControl parent) where T : UITestControl, new()
    {
        return parent.Find<T>().FindAllAsType();
    }

private static IEnumerable<T> FindAllAsType<T>(this T current) where T : UITestControl, new()
    {
        if (typeof(T).IsSubclassOf(typeof(HtmlControl)))
        {
            return current.FindMatchingControls().Select(x => new T().ExtendFrom(x));
        }
        return current.FindMatchingControls().OfType<T>();
    }

private static IEnumerable<U> FindAllCastTo<T, U>(this T current) where T : UITestControl
    {
        return current.FindMatchingControls().Cast<U>();
    }

最可能的情况是控件类型不是您尝试将其强制转换为或者为null。