javascript中的Xpath评估相对于某个元素不起作用

时间:2013-02-15 22:07:16

标签: javascript dom xpath selenium

以下代码将显示“之前”和“之间”警报,但不会显示“之后”警报。

alert("before")

var test = document.evaluate('.//*',document,document.createNSResolver(document),XPathResult.ANY_TYPE,null)
alert(element.tagName)//alerts "TABLE" 
alert("between")
test = document.evaluate('.//*',element,document.createNSResolver(document),XPathResult.ANY_TYPE,null)
alert("after")

这是作为selenium扩展的一部分编写的。在firebug中运行时,代码中的alert(document)给出的结果与alert(document)不同。 [object XULDocument] vs [object HTMLDocument]。

3 个答案:

答案 0 :(得分:0)

您的第二个测试有一个未定义的变量element

答案 1 :(得分:0)

解决。

document未引用selenium扩展中的HTML文档。但是每个元素都有一个对拥有它的文档的引用。在这种情况下

test = document.evaluate('.//*',element,document.createNSResolver(document),
XPathResult.ANY_TYPE,null)

变为

test = element.ownerDocument.evaluate('.//*',element,
element.ownerDocument.createNSResolver(element.ownerDocument),
XPathResult.ANY_TYPE,null)

依旧......

答案 2 :(得分:0)

Zackkenyon的一个变种回答,没有解析器似乎有效。

var rangee = table.ownerDocument.evaluate("./tbody/tr", table, null,
XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
相关问题