2013-11-01 48 views
6

我需要一些幫助,以便在webDriver中使用xpath搜索確切的文本。如何通過在webdriver中使用Xpath進行精確的文本匹配來搜索節點

假設我有HTML如下..

<html><body> 
    <table> 
    <tr> 
     <td><button>abcd</button></td> 
     <td><button>abc</button></td> 
    </tr> 
    </table> 
</body></html> 

現在我想點擊按鈕「ABC」

我使用的XPath作爲//button[contains(text(),'abc')]但它始終是執行按鈕「ABCD」,因爲它還包含文本「abc」。在這方面,我需要一個謂詞或其他程序,可以搜索確切的文字,而不是包含文字。

我也試圖與//button[matches(text(),'abc')]//button[matches($string,'abc')]//button[Text='abc')]//button[.='abc')]等等但這些都不制定了識別「ABC」按鈕。

我不知道是否有任何問題關於我的xpath版本,因爲我不知道版本。但我使用的是Java 1.6 JDK。

儘管我的確切場景不是示例,但需要應用類似的邏輯。

因此,任何幫助或建議將不勝感激。

+3

我不明白... **等於**搜索有什麼問題? ...'//按鈕[文本()= 'ABC']'....? – Arran

+1

@Arrana看起來像'//按鈕[Text ='abc']''錯誤,但是右邊是'//按鈕[Text()='abc']'(如你所寫) – olyv

+0

是的,它絕對正確。 ...它會像一個相等的搜索... //按鈕[text()='abc']這個xpath正常工作...非常感謝。 – souvik

回答

0

嘗試使用ends而不是contains。如果按鈕不具有唯一屬性,那麼也可以添加父層次結構。像// table/tr/td [1]。

+0

thanx對於你的評論,告訴我一件事,html包含文本的前後空格。如「abcd」和「abc」。如果我使用[contains(text(),'abc')] xpath,那麼它在「abcd」按鈕上執行。但如果我使用[開始與(文本(),'abc')或[ends-with(文本(),'abc'),它顯示無法找到locator.the我提到的空間xpath領先或尾隨到字符串是正確的??其次「td」號碼不固定在我的情況。該按鈕可能包含在表中的任何td中。事實上在一些其他tr標籤中也是因爲按鈕生成是動態的。因此,我不能按層級去。 – souvik

+0

如果不訪問應用程序就無法判斷,但您可以通過獲取文本屬性值並使用語言功能執行字符串比較來實現這一點。 – Akbar

+0

Element.getattribute(「text」) – Akbar

19

我會用下一個xpath //button[text()='abc']。你提到了text()函數,但我不確定語法是否正確。您還試圖使用 - 它搜索部分文本和WebDriver獲得第一個元素找到。我是你的情況它是<button>abcd</button>按鈕

+0

工程就像一個魅力。謝謝。 – MansoorShaikh

+0

@MansoorShaikh謝謝,很高興知道:) – olyv

相關問題