【发布时间】:2015-12-14 15:13:08
【问题描述】:
这似乎曾经有效,但现在不再有效。也许某处有一些切换可以启用它?使用此代码
private static async Task<string> getText(double x, double y)
{
try
{
var location = new System.Windows.Point(x, y);
AutomationElement element = AutomationElement.FromPoint(location);
object patternObj;
if (element.TryGetCurrentPattern(TextPattern.Pattern, out patternObj))
{
var textPattern = (TextPattern)patternObj;
var range = textPattern.RangeFromPoint(location);
range.ExpandToEnclosingUnit(TextUnit.Word);
var text = range.GetText(-1).Trim();
return text;
}
else
{
return "no text found";
}
}
catch (Exception ex)
{
return ex.Message;
}
}
它确实适用于带有浏览器的 Metro 应用程序(但如果滚动太快会有点不稳定)。对于清单,我使用的是 uiAccess=true,AsInvoker。当以管理员身份运行时,它没有帮助。
更新。使用 WebDriver 的解决方案如果可以做同样的事情是可以接受的。
【问题讨论】:
-
代码在什么时候不再按预期工作? (例如,不支持 Text 模式,或者 RangeFromPoint() 返回意外的范围。) Edge 中应该有一个支持 Text 模式的元素。所以也许 FromPoint() 没有返回那个元素。您能否检查该元素的属性以确定您拥有的元素。如果不是支持 Text 模式的元素,也许您可以从 FromPoint() 返回的元素导航到 Text 模式元素。
-
虽然我需要,但从点开始可能不起作用。
-
您的问题太宽泛了,因为它可以/应该在一般情况下起作用。请提供完整的复制案例。
-
您能告诉我们您要输出什么文本吗? url,html,标题栏?请参阅此问题以使用 Windows 自动化进行 url 抓取:stackoverflow.com/a/32219999/1155847
标签: c# automation microsoft-edge microsoft-ui-automation