2012-05-21 34 views
2

我的XPath '//div[@id='sharetools-container-div']/iframe[@id='sharetools-iframe']'工作正常,但是这个标签后有'#document'文本存在,并且这种'#document'后有HTML标签,所以当我延长XPath表达式为'//div[@id='sharetools-container-div']/iframe[@id='sharetools-iframe']/#document/html',它抛出异常如下:面临的问题找到XPath表达式

所致:类org.jaxen.saxpath.XPathSyntaxException: // DIV [@ ID = 'sharetools容器-DIV']/iframe中[@ ID = 'sharetools的iframe'] /#文件: 70:预期的'。','..','@','*',QName。

所以,请指导我如何为此编写XPath。

感谢, Dhananjay

+1

也许这是因为它们是单独的文档(假设XHTML是'iframe'标记语义) ,而XPath不是交叉文件? – mirabilos

回答

0

您还没有表现出你的源XML,但我们可以肯定一件事是,它不包含名为“#document”的元素,因为这是不合法的元素名称。出于同样的原因,您不能在XPath表达式中请求一个名为“#document”的元素。

+0

因此(这只是基于常见情况的猜测),您可能只需要删除'#document'部分即可使XPath正常工作。如果你想更详细地解释为什么,请告诉我们你的XML的关键部分,这样我们可以告诉你这个'#document'文本是什么。 –

+0

@Michael Kay,我在另一个html页面中有一个html页面。所以我想从内部html页面访问元素。但它不工作。所以我需要为此写入xpath。并且在这个xpath之后'// div [ @ id ='sharetools-container-div']/iframe [@ id ='sharetools-iframe']',我的内部html页面是以html标签开始的。所以我需要'// div [@ id ='sharetools -container-div']/iframe [@ id ='sharetools-iframe']/html'.So请指导我。谢谢。 – dhananjay

0

你可以用不同的XPath用来绕过字:#document字:后裔 例如:

//div[@id='sharetools-container-div']/iframe[@id='sharetools-iframe']/descendant::*[1] 

或类似的东西。它取决于你想在内部html中使用什么

+0

这是否真的有用?在哪些浏览器(或其他XPath实现)中执行此项工作?谢谢。 – jpaugh

-1

首先感谢提出这个问题。我也面临同样的问题。 在以下行的帮助下,我得到了解决我的情况。

driver.SwitchTo().Frame(driver.FindElement(By.Name("fraToc"))); 

谢谢。

+0

OP的问题与Selenium无关,你没有提及;我明白你在说什么的唯一原因是因为我早些时候看到了[这个答案](http://stackoverflow.com/a/28816113/712526)。 – jpaugh

2

据我所知,XPath不陷入iframe s.You看到,XPath表达式绑定到特定的XML文档,如HTML文档,,他们可以对进行评估。在浏览器中,iframe被视为一个单独的文档。 节点本身是父文档的一部分;但它仅仅是指向另一个文档(iframe的内容)的指针,它是完全分开的。

这似乎是本email chain的要点,并且似乎自然脱落的事实,XPath表达式通过调用document.evaluate评价(即,特定的document对象的成员),如在Firefox实现。这表明定义iframe和XPath的各种规范之间的重叠排除了在单个XPath表达式中遍历该文档边界  —或至少似乎是Mozilla的解释。

但请注意,所有这些都是基于Firefox特定实现XPath规范的猜测。此限制可能适用于其他浏览器,也可能不适用,但我会怀疑它的确存在。

这也似乎可以解释为什么硒需要你从一个文档(父HTML页面),以执行反对XPath表达式上下文切换到另一个(iframe本身),如通过张贴@解决方案暗示singaravelan,andothers


但是,只有当HTML文档是不够的神奇! (并非所有的HTML文档都是格式良好的XML:浏览器比XML解析器要宽松得多; Cf. @MathiasMüller的评论。)

+2

“一个特定的XML文档,比如一个HTML文档” - 要小心措辞,HTML不一定是格式良好的XML。除此之外,这个答案是重点。 –

+0

哦,亲爱的!格式错误的HTML的暴政!那么,我想,浏览器的理想化HTML文档的概念! – jpaugh