使用UI自动化获取Firefox URL

时间:2014-10-13 20:31:06

标签: c# firefox ui-automation

我试图使用以下代码在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;
}

对于树结构,请参阅:

enter image description here

1 个答案:

答案 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,因为子树包含搜索中的当前元素。