2

xpath//ul//li[contains(text(),"outer")]を使用して外側の ul で li を検索しても機能しない

<ul>
  <li>
   <span> not unique text, </span>
   <span> not unique text, </span>
   outer ul li 1
   <ul >
     <li> inner ul li 1 </li>
     <li> inner ul li 2 </li>   
   </ul>
  </li>
  <li>
   <span> not unique text, </span>
   <span> not unique text, </span>
   outer ul li 2
   <ul >
     <li> inner ul li 1 </li>
     <li> inner ul li 2 </li>   
   </ul>
  </li>
</ul>

外側のulに特定のテキストがあるliを見つける方法はありますか?

ありがとうございました

4

4 に答える 4

13

これはあなたのために働くでしょう//ul//li[contains(.,"outer")]

于 2013-07-01T13:52:21.533 に答える
2

これを Saxon で実行すると、元の XPath 式は次のようになります。

XPTY0004: 複数の項目のシーケンスは、contains() (""、""、...) の最初の引数として許可されていません

現在、Selenium はおそらく XPath 2.0 ではなく XPath 1.0 を使用していると思います。1.0 では、contains() 関数に「最初の項目のセマンティクス」があります。引数が複数を含むノード セットである場合、引数を文字列に変換します。最初のノードのみを考慮する必要があります。そして、最初のテキスト ノードはおそらく空白です。

子テキスト ノードに「outer」が含まれているかどうかをテストする場合は、次を使用します。

//ul//li[text()[contains(.,"outer")]]

XPath 2.0 に切り替えるもう 1 つの理由は...

于 2013-07-01T17:17:09.753 に答える