如何约束CodedUI从父对象开始搜索?

时间:2016-12-08 20:55:32

标签: c# wpf debugging testing coded-ui-tests

我试图在代码优先方法(页面对象模式)中为WPF UI使用CodedUI。我能够在主窗口的选项卡中导航到组框内的特定列表项。每个列表项都包含一个复选框以及其他一些内容;我想自动点击该复选框,但我收到了一条例外信息'搜索可能在" TabList,因为它可能已经虚拟化了孩子......'

唯一的问题是,我根据以下代码将包含WpfListItem设置为WpfCheckBox的父级:

public class ConfigItem 
{
    private readonly WpfListItem _instance;

    public WecoConfigItem([NotNull] WpfListItem instance)
    {
        if (instance == null) throw new ArgumentNullException("instance");
        _instance = instance;
    }

    public ConfigItem SelectConfiguration()
    {
        var checkBox = new WpfCheckBox(_instance);
        _instance.DrawHighlight();
        checkBox.SearchProperties.Add(WpfCheckBox.PropertyNames.AutomationId, "cbIsSelected");
        Mouse.Click(checkBox);
        return this;
    }
}

SelectConfiguration方法发生故障。在测试执行期间,相应的ListItem会突出显示,但随后在html输出中,录制的图像会突出显示应用程序。所以,有些问题:

  1. 当我在构造函数中提供WpfListItem作为父项时,为什么搜索从应用程序窗口开始?
  2. 我是否正在做一些导致DrawHighlight()输出和HTML输出之间出现差异的事情?
  3. 对于代码优先的页面对象模式方法,如何将搜索约束为以WpfListItem父对象开头?
  4. 编辑:搜索实际上是从顶级应用程序开始,而不是标签 - 我正在查看陈旧的HTML日志。问题陈述仍然基本相同。

1 个答案:

答案 0 :(得分:0)

当您调用DrawHighlight()时,您正在启动搜索。然后下一个语句提供其他搜索条件,然后再次访问控件(Mouse.click()),然后您从缓存中读取。我假设您需要通过将SearchOptions设置为AlwaysSearch来禁用缓存,或者在调用DrawHighlight()之前添加条件。