2015-11-23 180 views
4

使用硒我試圖單擊一個<td>元素,該元素出現在鏈接文本爲「Main」的<td>元素之前。我想點擊此圖片中突出顯示的元素:選擇包含某個linkText的元素之前的元素

screen

無論是<td>元素我要點擊和一個後是相同的<tr>元素中,圖像中顯示爲具有id=5

該元素對應於下面突出顯示的整個行。注意它的linkText如何是「綠色」,就像它下面的元素一樣。因此,我不能使用我想單擊的<td>元素的xpath/css選擇器。

enter image description here

我試圖單擊突出 「綠色」。這就是爲什麼我試圖點擊<td>元素之前元素與「主」作爲其linkText。

我有這樣的代碼,但我不知道如何得到這個代碼相匹配的元素之前的元素:WebElement templateFound = driver.findElement(By.linkText("Main"));

任何幫助,謝謝

回答

2

可以使用following-sibling axis

//td[following-sibling::td[1]/a = 'Main'] 

基本上,這將給你有文字「一個鏈接td元素主要「裏面第一個td兄弟姐妹。


或者,一旦你通過位於鏈接文本的鏈接,你可以使用preceding,這將使你的第一個前td元素除了父td元素:

前面軸表示所有節點位於文檔中上下文節點 之前的節點除外的任何祖先,屬性和名稱空間 節點。

WebElement templateFound = driver.findElement(By.linkText("Main")); 
templateFound.findElement(By.xpath("preceding::td")); 
+0

感謝alecxe,'preceding :: td'可能正在工作,但是它選擇了整個'td'元素,但是我需要點擊它的子'a'元素。我很抱歉。所以我嘗試使用'templateFound.findElement(By.xpath(「preceding :: td/a」));'但它仍然點擊整個'td'。任何想法爲什麼?謝謝 – Mathomatic

+0

@Hurmle表達式看起來正確,應該匹配'td'中的'a'元素。謝謝。 – alecxe

+0

謝謝alecxe,我正在嘗試你的第一個建議'// td [following-sibling :: td [1]/a ='Main']'但是這選擇了'td'元素而不是'a'鏈接,它包含「綠色」。我如何適應這個表達式,因此它只選擇'a'。試試你自己:[http://www.xpathtester.com/xpath/9a6b90f8859651d1633f2c33d14d39b8] – Mathomatic

1

它應該很容易使用XPath。我假設你要選擇的td具有文本綠色

//a[.='Main']/../../td[.='Green'] 
+0

我懷疑有一個'具有「綠色」元素了'是text..may它應該是'//a[.='Main']/../../td [a ='Green']'或'// a [。='Main'] /../../ td/a [。='Green']'而不是.. – alecxe

+0

感謝Saifur。這個xpath與alecxe對'preceding :: td'的回答一樣可靠。你的回答似乎涉及更多的組件,這可能會導致問題。對不起,如果我錯了,謝謝。 – Mathomatic

相關問題