我试图使用以下代码在Firefox中获取URL的值。问题是它只返回"搜索或输入地址" (请参阅下面的Inspect.exe树结构)。看起来我需要降低一级。有人可以告诉我如何做到这一点。
public static string GetFirefoxUrl(IntPtr pointer) {
AutomationElement element = AutomationElement.FromHandle(pointer);
if (element == null)
return null;
AutomationElement tsbCtrl = element.FindFirst(TreeScope.Subtree, new PropertyCondition(AutomationElement.NameProperty, "Search or enter address"));
return ((ValuePattern)tsbCtrl.GetCurrentPattern(ValuePattern.Pattern)).Current.Value as string;
}
对于树结构,请参阅:
答案 0 :(得分:4)
您不清楚从哪个元素开始搜索,但您有两个具有该名称的元素。一个是组合框控件,另一个是编辑控件。尝试使用AndCondition
组合多个PropertyCondition对象:
var nameCondition = new PropertyCondition(AutomationElement.NameProperty, "Search or enter address");
var controlCondition = new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Edit);
var condition = new AndCondition(nameCondition, controlCondition);
AutomationElement editBox = element.FindFirst(TreeScope.Subtree, condition);
// use ValuePattern to get the value
如果搜索从组合框开始,您可以将TreeScope.Subtree
更改为TreeScope.Descendants
,因为子树包含搜索中的当前元素。