MS UIAutomation 对文本无用吗?如何设置字体粗细、获取插入符号位置、插入文本等?

Posted

技术标签:

【中文标题】MS UIAutomation 对文本无用吗?如何设置字体粗细、获取插入符号位置、插入文本等?【英文标题】:Is MS UIAutomation useless against text? How to set font weight, get caret pos, insert text, etc? 【发布时间】:2013-03-07 03:33:54 【问题描述】:

我正在研究用于控制文本的 Microsoft UIAutomation,但发现它没用。我需要做以下事情:

获取插入符号位置 This article 暗示我需要跟踪插入符号,如果我不知道它的原始位置,这将不起作用.... 在特定位置插入文本 只发现使用ValuePatternSetValue覆盖整个字段的能力 设置字体粗细 我可以读取字体粗细,但不能设置它 等

到目前为止,我已经阅读了许多文章,但没有人指出这些可能性。 This SO question 对我开始很有帮助,但是当我试图深入挖掘时,我遇到的问题多于答案。是我去 MS Accessibility Automation 的唯一选择,它在 WPF 虚拟化等方面表现不佳。

如果有人可以为我指出一篇有用的文章或提供上述缺点的示例,那就太好了。但是,我目前不抱希望,因为这一切似乎都导致了获取信息的方法,而不是更新信息。

编辑

我什至试图深入研究UIAutomationClient.dll,似乎确实没有对此的支持。似乎 UIA 主要用于提取粗略的信息并单击周围。没有真正的文本支持

Here is another SO question...relatively similar to this one...it 似乎证实 UIA 对我的需求毫无用处..

Hack 解决方法

我们的解决方法是使用 UIA 获取一般上下文,然后使用 AutoIt SendKeys

【问题讨论】:

我也花了几个小时寻找这个。你的帖子减轻了我的挫败感——我会为此避免 UI 自动化。 【参考方案1】:

您指向的文章描述了希望支持 TextPattern 以实现 UI 自动化的应用程序需要如何工作,而不是 客户端 希望使用 TextPattern 检索信息需要去工作。特别是,实施者需要跟踪插入符号; 客户没有。

话虽如此,TextPattern 旨在检索信息,而不是设置它;在与旨在插入文本的文本服务框架广泛合作之后,我可以理解为什么。 (许多应用程序的设计不允许随意随意操作其数据结构;允许应用程序决定何时可以对其进行操作严重扭曲了文本服务的设计。)

前两项非常简单。您可以使用 IUIAutomationTextPattern::GetSelection 获取选定的文本;这将返回 text ranges 的集合,您可以提取其位置等。

虽然您不能直接操作文本范围的内容,但您可以选择它,然后使用 SendKeys 等生成输入。

【讨论】:

以上是关于MS UIAutomation 对文本无用吗?如何设置字体粗细、获取插入符号位置、插入文本等?的主要内容,如果未能解决你的问题,请参考以下文章

如何处理 UIAutomation 中的文本通知?

UIAutomation 和在滚动视图中读取静态文本

如何使用 Xcode 机器人在模拟器上运行 UIAutomation

MS Access 2010 上的可编辑文本框 - 行为正确吗?

如何使用UIAutomation进行iOS 自动化测试

清除 UIAutomation 测试的钥匙串