2013-08-02 30 views
1

我有一個頁面,其中包含具有多個行/列的表格。在其中的一個專欄中,我有一個鏈接,指出「確定」。我需要點擊該鏈接。Selenium Webdriver - 點擊表格中的某個元素的問題

這是我的代碼,但它工作非常不一致。它在幾行上單擊「確定」,但在其他幾行上未能點擊相同。我在這裏錯過了什麼嗎?

更新: 我得到了它在使用它,而不是colElement.findElement(By.linkText("OK")).click()colElement.click()

List<String> tableValues = new ArrayList<String>(); 
WebElement element=driver.findElement(By.className("table")); 
List<WebElement> rowCollection=element.findElements(By.xpath("//*[@className='table']/tbody/tr")); 
for(WebElement rowElement:rowCollection) 
    { 
    List<WebElement> colCollection=rowElement.findElements(By.tagName("td")); 
    for(WebElement colElement:colCollection) 
     { 
     if(colElement.getText().equals("OK")) 
      { 
      colElement.click(); 
      } 
     } 
    } 
+0

你爲什麼使用'i_ '變量?你已經在迭代你的元素列表了嗎?除此之外,代碼看起來不錯,如果您調試和逐步執行會發生什麼? –

+0

我可以刪除這些。控制似乎流暢,但'點擊'沒有發生。另外,如果我在colElement.click()行之前執行colElement.getText()的sysout,我會在控制檯中看到「OK」。 – Ramnath

+0

就這樣,我明白了,點擊「確定」後會發生什麼? –

回答

0

是元素與「OK」一個TD或錨的工作?如果表格單元格中存在錨點,則可以更可靠地點擊該單元格而不是父級td。

+0

它在'td' – Ramnath

0

你可以試試這個

if(colElement.getText().equalsIgnoreCase("OK")) 

代替

if(colElement.getText().equals("OK")) 
+0

同樣的結果。當我執行sysout時,我能夠在相同的情況下看到它。 – Ramnath

0

我有幾個地方我使用的代碼非常相似,你的測試,它工作正常。從我這些問題的經驗,我想補充兩點:

1)更改此行的代碼:

if(colElement.getText().equals("OK"))

if(colElement.getText().trim().equals("OK"))

2)包住點擊進入一個Wait(讓點擊重試一段時間)。

希望它有幫助。

+0

這在我的情況下也不起作用,但奇怪的是我通過colElement.findElement(By.linkText(「OK」))。click()來工作。 – Ramnath

+0

太棒了!最後它並不奇怪:文本**實際上是一個_link text_的確如此:) –

相關問題