这是我使用expect.js
运行的一项小测试:
describe('xpath', function () {
it('finds attribute nodes', function () {
$(document.body).append('<string fooBar="bar"><data id="xyz"></data></string>');
var xyz = document.getElementById('xyz');
expect(xyz).not.to.be(null);
var nodes = document.evaluate('../@fooBar', xyz, null, XPathResult.ANY_TYPE, null);
var element = nodes.iterateNext();
expect(element.nodeValue).to.equal('bar');
});
});
我正在使用Testacular在Chrome和Firefox上对其进行测试,虽然它在Firefox上传递,但在Chrome上失败并显示element
为null
时出错。对我来说真正疯狂的部分是,如果我将fooBar
更改为foo
,它会传递给两个系统。如果我使用Foo
代替foo
,Chrome也会中断。换句话说,当搜索到的属性中包含大写字母时,Chrome上的XPath查询似乎会中断。这是正常的行为吗?我错过了什么吗?或者这是Chrome中的错误?
我添加了Google的Wicked Good XPath,现在Internet Explorer也可以使用,但Chrome仍然无法使用。
如果实际属性有上限,则XPath查询适用于Chrome,但XPath值全部为小写。
答案 0 :(得分:1)
您使用的是XHTML吗?如果是这样,XHTML规范规定all element and attribute names must be in lower case。
您可能会发现Chrome仅适用于在此基础上评估XPath,而其他浏览器更符合XML(任何情况下都有效)。