基于UITestControl的CodedUI对象创建

时间:2015-07-28 08:41:30

标签: c# .net coded-ui-tests microsoft-ui-automation

我的问题是对以下CodedUI not recognizing HtmlControl when searched within scope of UITestControl instead of BrowserWindow问题的延续。

我遇到了同样的问题,我想知道为什么会这样。以下是我的发现。

BrowserWindow继承自ApplicationUnderTest,它自己继承在ApplicationBase上,后者再次继承自UITestControl。

作为HtmlRow的所有控件都包含一个构造函数,请求作为参数UITestControl。根据我的经验,我可以确认,如果您传入示例HtmlDiv或BrowserWindow的实例,则控件将构造并正确运行。

这是一种我无法解释的奇怪行为,需要更多分析。

我确实看到我可以用以下情况复制相同的内容:

private readonly UITestControl _container;

protected Page(Process process)
{
    _container = BrowserWindow.FromProcess(process);
}

protected Page(UITestControl testControl)
{
    _container = testControl;
}

public UITestControl Container
{
    get { return _container; }
}

private HtmlEdit _startDateTextBox;

protected HtmlEdit StartDateTextBox
{
    get
    {
        if (_startDateTextBox == null)
        {
            _startDateTextBox = new HtmlEdit(Container);
            _startDateTextBox.SearchProperties.Add(HtmlControl.PropertyNames.Id, StartDateTextBoxId,
                PropertyExpressionOperator.Contains);
        }

        return _startDateTextBox;
    }
}

此示例失败,同时我希望它可以正常工作,因为以下示例正常工作:

private readonly BrowserWindow _container;

protected Page(Process process)
{
    _container = BrowserWindow.FromProcess(process);
}

public UITestControl Container
{
    get { return _container; }
}

private HtmlEdit _startDateTextBox;

protected HtmlEdit StartDateTextBox
{
    get
    {
        if (_startDateTextBox == null)
        {
            _startDateTextBox = new HtmlEdit(Container);
            _startDateTextBox.SearchProperties.Add(HtmlControl.PropertyNames.Id, StartDateTextBoxId,
                PropertyExpressionOperator.Contains);
        }

        return _startDateTextBox;
    }
}

如果有人对这个问题有所了解,我真的很想知道原因。

由于

1 个答案:

答案 0 :(得分:0)

你能按照我在上述问题中的要求给我发送一份repro zip吗?我很想深入了解这个,因为我无法根据提供的代码进行复制。