2017-04-14 9 views
0

Java、Chrome上でSelenium WebDriver 2.53.1を使用します。Selenium xpath text() - シンプルな選択が動作していないようです。

要素を見つけて、それをdropdownMenuListという名前のWebElement変数に保存します。ここに書式設定されたその外部HTMLがあります。

<ul tabindex="-1" class="dropdownMenu apmurldropdownmenu thing menu" role="menu" aria-label="Menu region"> 
    <li class="menuitem apmurldropdownmenu" tabindex="-1" role="menuitem"> 
     <div class="thing text">CardNameWebpage</div> 
    </li> 
    <li class="menuitem apmurldropdownmenu" tabindex="-1" role="menuitem"> 
     <div class="thing text">CardNameWebpage</div> 
    </li> 
    <li class="menuitem apmurldropdownmenu" tabindex="-1" role="menuitem"> 
     <div class="thing text">CardNameWebpage</div> 
    </li> 
    <!-- react-text: 9 --> 
    <!-- /react-text --> 
</ul> 

は、それから私は、XPathによってそれで検索:

dropdownMenuList.findElement(By.xpath("*[text()='CardNameWebpage']")); 

そして、私ははNoSuchElementExceptionを取得します。しかし、HTMLにはこのテキストの3つの要素がすべて含まれています。私は間違って何をしていますか?

答えて

2

あなたが探している要素がトップレベルではないので、(ポールtremberthが:)絶対的に正しいです)現在の1の子孫の要素を見つけるには前

"//*[text()='CardNameWebpage']" 

を2個のスラッシュ(//)を入れて追加する必要がありますxpathの始点を指す

".//*[text()='CardNameWebpage']" 
+0

私は、//ドキュメントの先頭から検索します。この要素からのみ検索する必要があります。 –

+2

'.//* [text()= 'CardNameWebpage']'(相対位置パス) –

+0

この場合、 '*'をより具体的にするために '*'を置き換えますが、私。 :) – JeffC

0

編集://*[text()='value']または//*[contains(text(),'value')]に変更する必要があります。

+0

私は、* * [text()= 'value']または// * [contains(text()、 'value')を意味すると思います。どちらの場合でも "*"を "li"に置き換えることができ、含まれているバージョンでは "。"を代用することができます。 "text()"の場合 –

+0

私は//ドキュメントの先頭から検索します。この要素からのみ検索する必要があります。 –

+0

いいえ、//単に相対位置から "*"を検索するように指示します。何が間にあるノードレベルをスキップして、アイテムを探すか/探していますか? // li(con​​tains( "boo")]の場合、現在の位置から始まる行の下に "boo"を含む最初のリスト項目を探します。 –

関連する問題