代码之家  ›  专栏  ›  技术社区  ›  Lunivore

在Microsoft UI自动化中,如何判断元素是否与属性条件匹配?

  •  5
  • Lunivore  · 技术社区  · 14 年前

    我试图在GridView的特定行中找到一个AutomationElement(因此有许多相同的元素)。我正在迭代行中的元素,我想使用matcher来查看某个特定元素是否符合我传递给它的条件。我从简单的属性条件开始。

    这是我的测试:

    [TestFixture]
    public class ConditionMatcherBehaviour
    {
        [Test]
        public void ShouldMatchAPropertyConditionByItsValue()
        {
            var conditionMatcher = new ConditionMatcher();
            var condition = new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Pane);
            Assert.True(conditionMatcher.Matches(AutomationElement.RootElement, condition));
        }
    }
    

    代码如下:

    public class ConditionMatcher : IMatchConditions
    {
        public bool Matches(AutomationElement element, Condition condition)
        {
            var propertyCondition = (PropertyCondition) condition;
            return propertyCondition.Value.Equals(element.GetCurrentPropertyValue(propertyCondition.Property));
        }
    }
    

    不幸的是测试失败了。根元素(桌面)的controlType确实是controlType.pane,但奇怪的是,propertyCondition.value是“50033”。

    关于如何在findfirst/findall之外测试属性条件有什么想法吗?

    (我的解决方法是创建我自己的条件类型并测试它,但是我想检查一下我是否误解了什么/做了什么愚蠢的事情。)

    1 回复  |  直到 14 年前
        1
  •  4
  •   Lunivore    14 年前

    找到它了。

    public class ConditionMatcher : IMatchConditions
    {
        public bool Matches(AutomationElement element, Condition condition)
        {
            return new TreeWalker(condition).Normalize(element) != null;
        }
    }
    

    不完全明显,但它适用于匹配和非匹配条件。多亏了所有看过和思考过的人。希望这能帮助其他人!