2

这是我运行的一个小测试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 上失败,并显示错误elementnull. 对我来说真正疯狂的部分是,如果我更改fooBar为 just foo,它会在两个系统上传递。如果我使用 ChromeFoo代替foo. 换句话说,当寻找的属性中包含大写字母时,Chrome 上的 XPath 查询似乎会中断。这是正常行为吗?我错过了什么吗?或者这是 Chrome 中的错误?

更新 1

我添加了 Google 的 Wicked Good XPath,现在 Internet Explorer 也可以工作了,但 Chrome 仍然失败。

更新 2

如果实际属性有大写字母,则 XPath 查询在 Chrome 上有效,但 XPath 值全为小写。

4

1 回答 1

1

你在使用 XHTML 吗?如果是这样,XHTML 规范规定所有元素和属性名称必须小写

您可能会发现 Chrome 只准备在此基础上评估 XPath,而其他浏览器则更符合 XML(任何情况下都有效)。

于 2013-03-01T08:03:31.930 回答