【问题标题】:Xpath having multiple predicate statements具有多个谓词语句的 Xpath
【发布时间】:2014-09-04 16:13:03
【问题描述】:

我环顾四周,似乎找不到这个问题的答案。 非常简单:

<a>
  <b>
     <div class=label>
     <label="here"/>
     </div>
  </b>
  <div id="something">
     <b>
        <div class=label>
           <label="here"/>
        </div>
  </div>
</a>

所以我试图抓住第二个“这里”标签。我想做的是做 id 去“某事”部分

//.[@id="something”]

然后从那时起搜索带有类似

的标签
//.[@class="label" and label="here"]

但是从阅读其他一些回复来看,似乎不像

//.[@id="something”][@class="label" and label="here"]

有效,我只是想知道我是否只是遗漏了它的工作原理?我知道我可以用另一种方法简单地得到上述内容,这只是一个示例,询问如何在两个谓词之后执行两个谓词语句(如果确实可能的话)。 谢谢!

【问题讨论】:

  • &lt;label="here"/&gt; - 奇怪的格式。你确定这是它在网页上的表示方式吗?
  • 是的,这不是真实数据,只是一个例子来说明:)

标签: xpath predicate


【解决方案1】:

我认为你需要这样的东西:

//.[@id="something”]//.[@class="label" and label="here"]

重点是 // 表示:从当前节点中选择文档中匹配选择的节点,无论它们在哪里 参考:http://www.w3schools.com/xpath/xpath_syntax.asp

【讨论】:

  • 啊好吧,看起来答案是://.[@id="add-schema-property-modal"]//.[@class="o-form-label" and label="变量名"] 与 "//."从当前节点中选择节点。我会尽快接受(需要延迟 2 分钟)
【解决方案2】:

语法//*[@x='y']//.[@x='y'] 更惯用,可能是因为它在XPath 1.0 和XPath 2.0 中都有效,而后者只在XPath 2.0 中允许使用。不允许在“。”之后使用谓词。可能是 XPath 1.0 中的一个意外限制,我认为某些实现可能已经放宽了限制,但它在规范中:谓词只能跟随 NodeTest 或 PrimaryExpr,以及“。”两者都不是。

在 XPath 2.0 中,//* 选择树中的所有元素节点,而//. 选择所有类型的所有节点(包括文档根节点),但在此示例中效果相同,因为谓词 @987654325 @ 只能由元素节点匹配(对于所有其他节点类型,@x 不选择任何内容,因此不能等于任何内容)。

【讨论】:

  • 是的,我遇到了 selenium 如何解释 xpaths 的问题!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-30
  • 1970-01-01
  • 2011-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多