首页 > 解决方案 > 设置 AutomationElement 值的问题

问题描述

我在使用 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-automationmicrosoft-ui-automation

解决方案


可能是此对话框没有正确支持 UI 自动化,或者您只是针对错误的元素

验证您是否可以使用Microsoft 的 Inspect.exe或类似工具。检查.exe 示例


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

如果它不起作用并且:

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

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


编辑:还有一件事你应该看看,我想知道为什么我一开始没有提到它:注册到 UI 自动化事件 例如,你可以为结构更改事件类型注册一个回调,然后检查如果您谈论的对话框出现。如果是这样-> 单击对话框的确认按钮。

可能您将不得不同步您的执行,以便 UI 自动化脚本中的每个进一步操作都等到执行注册的回调并单击确认按钮。


推荐阅读