UI Automation (UIA) 提高自动化属性已更改事件异常"Value does not fall within the expected range"



我当前正在尝试实现Move(double x, double y)作为UI自动化提供商API中ITransformProvider的一部分。规格说,在移动元素后,我必须提出一个界面式旋转的事件。

    // Save original location to raise an event
    System.Windows.Rect oldBoundingRectangle = BoundingRectangle;
    //  ... Move logic code here ...
    // Raise BoundingRectanglePropertyChanged event if clients are listening
    if (AutomationInteropProvider.ClientsAreListening)
    {
            AutomationPropertyChangedEventArgs propertyChangedArgs = new AutomationPropertyChangedEventArgs(AutomationElementIdentifiers.BoundingRectangleProperty, oldBoundingRectangle, BoundingRectangle);
            AutomationInteropProvider.RaiseAutomationPropertyChangedEvent(this, propertyChangedArgs);
    }

this在上面的代码中实现IRawElementProviderFragment

AutomationInteropProvider.RaiseAutomationPropertyChangedEvent()的呼叫提出了一个带有消息的参数exception" 值不在预期的范围内。"

这是一条相当通用的错误消息,我在隔离原因方面遇到困难。事件args的旧参数和新参数均为type system.windows.rect,boundingRectangle属性也是如此。

我什至尝试使用redgate反射器对uiautomationprovider.dll进行反复编译并生成调试符号。当我们在AutomationInteropProvider::RaiseAutomationPropertyChangedEvent(IRawElementProviderSimple element, AutomationPropertyChangedEventArgs e).中调用ValidateArgumentNonNull(e, "e");时,该异常会被抛出,除了ValidateArgumentNonNull()的主体从未被调用(内部的断点从未被击中(。我怀疑将dll分解不可靠,这是一个错误的铅。

在不相关的注意事项上,我能够为ISSELEDED提出财产更改的事件。

还有其他人经历过吗?预先感谢您!

在逻辑上触底调试此次调试后,我们开始尝试随机值以在黑盒测试方式中查看什么作用。

if (AutomationInteropProvider.ClientsAreListening)
{
    // Passing anything other than null for the oldValue and newValue results in an ArgumentException of "Value does not fall within expected range" Not sure why?
    AutomationPropertyChangedEventArgs propertyChangedArgs = new AutomationPropertyChangedEventArgs(AutomationElementIdentifiers.BoundingRectangleProperty, null, null);
    AutomationInteropProvider.RaiseAutomationPropertyChangedEvent(this, propertyChangedArgs);
}

我仍然不确定为什么要为OldValue和NewValue的作品提供零。该文档没有迹象表明我应该通过新价值和新价值以外的任何内容。UIAVERIFY测试正在通过,因此我正在努力假设这是正确的解决方案。不知道为什么。

Microsoft文档指出,界线无法在属性条件中使用。

属性参数不能是边界rectangleproperty。

如果一个人试图传递任何其他值,则将null作为界点的属性值,则使用"值"升高的crigntException不在预期的范围内。

https://learn.microsoft.com/en-us/dotnet/api/system.windows.automation.propertycondition.-ctor

相关内容

最新更新