这是我运行的一个小测试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
为 just foo
,它会在两个系统上传递。如果我使用 ChromeFoo
代替foo
. 换句话说,当寻找的属性中包含大写字母时,Chrome 上的 XPath 查询似乎会中断。这是正常行为吗?我错过了什么吗?或者这是 Chrome 中的错误?
更新 1
我添加了 Google 的 Wicked Good XPath,现在 Internet Explorer 也可以工作了,但 Chrome 仍然失败。
更新 2
如果实际属性有大写字母,则 XPath 查询在 Chrome 上有效,但 XPath 值全为小写。