Как узнать, соответствует ли элемент PropertyCondition в Microsoft UI Automation? - PullRequest
5 голосов
/ 25 июля 2010

Я пытаюсь найти элемент AutomationElement в определенной строке GridView (поэтому существует много идентичных элементов).Я перебираю элементы в строке и хотел бы использовать средство сопоставления, чтобы увидеть, соответствует ли конкретный элемент условию, которое я ему передаю.Я начинаю с простых PropertyConditions.

Вот мой тест:

[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».

Есть идеи относительно того, как я могу проверить PropertyCondition вне FindFirst / FindAll?

(Мой обходной путь - создать свой собственный тип условия и проверить его вместо этого, но я хотел бы убедиться, что я не неправильно понимаю что-то или делаю что-то глупое.)

1 Ответ

4 голосов
/ 25 июля 2010

Нашли.

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

Не совсем очевидно, но работает как для условий совпадения, так и для условий несоответствия. Спасибо всем, кто посмотрел и немного подумал об этом. Надеюсь, это поможет кому-то еще!

...