Chrome上的XPath选择属性失败

时间:2013-03-01 01:55:27

标签: javascript google-chrome xpath html

这是我使用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更改为foo,它会传递给两个系统。如果我使用Foo代替foo,Chrome也会中断。换句话说,当搜索到的属性中包含大写字母时,Chrome上的XPath查询似乎会中断。这是正常的行为吗?我错过了什么吗?或者这是Chrome中的错误?

更新1

我添加了Google的Wicked Good XPath,现在Internet Explorer也可以使用,但Chrome仍然无法使用。

更新2

如果实际属性有上限,则XPath查询适用于Chrome,但XPath值全部为小写。

1 个答案:

答案 0 :(得分:1)

您使用的是XHTML吗?如果是这样,XHTML规范规定all element and attribute names must be in lower case

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