设置 AutomationElement 值的问题

Issue with setting AutomationElement value

我在使用方法 ValuePattern.SetValue() 设置 AutomationElement 值时遇到问题。

一切正常,直到出现一些对话框。当对话框出现时,代码执行被卡住了。不会抛出异常。确认对话框后,代码执行继续。下面是代码示例:

            BasePattern basePattern = null;
            ValuePattern valuePattern = null;

            AutomationElement elementA = Window.GetElement(SearchCriteria.ByText(propertyName));

            object patternObjectA = null;          
            elementA.TryGetCurrentPattern(ValuePattern.Pattern, out patternObjectA);               

            basePattern = (BasePattern)patternObjectA;
            valuePattern = (ValuePattern)patternObjectA;     

            valuePattern.SetValue(optionToSet);

// Window.GetElement() 是来自 TestStack.White 框架的方法

// 代码执行卡在最后一行,直到对话框被确认

还有其他方法可以设置 AutomationElement 值吗?

有什么办法可以避免被对话框卡住吗?

如果有任何帮助,我将不胜感激。 提前致谢。

可能是此对话框不支持UI自动化正确您只是定位错误的元素.

验证您是否可以使用 Inspect.exe from Microsoft or similiar tools.


如果有效,请检查您是否真的再次使用代码定位了正确的组件。

如果不行和:

  • 如果您能够更改应用程序

    1. 您可以更改 UI 组件的所谓 AutomationPeer - 这里是 link 以获取更多信息
    2. 或者简单地使用另一个 UI 正确支持 UI 自动化的组件。
  • 如果您无法更改应用程序,并且也不需要运行在后台、并行等中。您可能只是聚焦组件(调用 setFocus() 到 AutomationElement,或展开它(通过 IsExpandCollapsePatternAvailable 或模拟 MouseClick 到组件坐标))然后使用 SendKeys.SendWait("test") 方法。


编辑: 还有一件事你应该看看,我想知道为什么我一开始没有提到它:Register to UI Automation Events 例如,您可以为 Structure change 事件类型注册一个回调,并检查您谈论的对话框是否出现。 如果是 --> 单击对话框的 确认 按钮。

可能你必须同步你的执行,这样 UI 自动化脚本中的每个进一步的动作都会等到注册的回调被执行并且确认按钮被点击。