2013-04-03 38 views
0

我使用Java和Selenium自動執行任務。如何根據表的第二列中的值設置第一列中的複選框?

我想根據第二列中的值是否與我的輸入值匹配來設置複選框(位於表格的第一列)。例如,在下面的代碼片段中,值「Magnus」匹配我的輸入值,所以我想設置與它關聯的複選框。

<table class="cuesTableBg" width="100%" cellspacing="0" border="0" summary="Find List Table Result"> 
    <tbody> 
     <tr class="cuesTableBg"> 
     <tr class="cuesTableRowEven"> 
     <tr class="cuesTableRowOdd"> 
      <td align="center"> 
       <input class="content-nogroove" type="checkbox" name="result[1].chked" value="true"> 
       <input type="hidden" value="1c62dd7a-097a-d318-df13-75de31f54cb9" name="result[1].col[0].stringVal"> 
       <input type="hidden" value="Magnus" name="result[1].col[1].stringVal"> 
      </td> 
      <td align="left"> 
       <a class="cuesTextLink" href="userEdit.do?key=1c62dd7a-097a-d318-df13-75de31f54cb9">Magnus</a> 
      </td> 
      <td align="left"></td> 
      <td align="left">Carlsen</td> 
      <td align="left"></td> 
     </tr> 
     <tr class="cuesTableRowEven"> 
    </tbody> 
</table> 

但是我無法做到。在上述情況下,下面兩行達到目的(如我的輸入值與第二行中的匹配):

WebElement checkbox = driver.findElement(By.xpath("//input[@type = 'checkbox' and @name = 'result[1].chked']")); 
checkbox.click(); 

但它不能被用作所需的值可能不是始終處於第二排。

我嘗試下面的代碼塊,但無濟於事:

List<WebElement> rows = driver.findElements(By.xpath("//table[@summary = 'Find List Table Result']//tr")); 
for (WebElement row : rows) { 
    WebElement userID = row.findElement(By.xpath(".//td[1]")); 
    if(userID.getText() == "Magnus") { 
     WebElement checkbox = row.findElement(By.xpath(".//input[@type = 'checkbox']")); 
     checkbox.click(); 
     break; 
    } 
} 

對於它的價值,在第二列文的XPath:

/html/body[@id='mainbody']/table/tbody/tr/td/div[@id='contentautoscroll']/form/table[2]/tbody/tr[3]/td[2]/a 

我不知道CSS Selectors。它會幫助嗎?

+0

是的,CSS選擇器必須幫助你:) – plsgogame

回答

1

如果你知道的輸入值已經你只需要使用以下XPath來選擇尊敬的兩個字符串複選框

​​

更新:

"//a[text()='Magnus']/parent::td/preceding-sibling::td/input[@type='checkbox']" 
+0

您可以在WebElement上調用findElement方法。這絕對沒問題。它也在您所分享的鏈接中提及。請參閱「方法摘要」中的第三種方法。 – Waltz

+0

對不起,錯誤的信息。我會更新我的回答,以免誤導任何其他用戶。非常感謝你指出我的錯誤。 – Santoshsarma

+0

您是否嘗試過xpath以基於該值訪問該複選框? – Santoshsarma

0

在比較equals應該用來代替==

更換

if(userID.getText() == "Magnus") 

String check1 = userID.getText(); 
if(check1.equals("Magnus") 
+0

感謝您指出,但這裏的重點是點擊複選框的問題。在能夠將第二列中的文本與所需值匹配後,我應該能夠在同一行的第一列中設置複選框。我無法做到。這是主要關心的問題! – Waltz

+0

讓我知道你正在測試的網站,如果它不是機密的,所以我可以幫你。 – Hemanth

+0

不幸的是,該網站只能在內部訪問。我添加了其中一個元素的XPath。希望能幫助到你。 – Waltz

0

好像這是我的一個愚蠢的錯誤。下面的代碼片斷是一個相當直接的代碼片段,它工作。

List<WebElement> rows = driver.findElements(By.xpath("//table[@class='cuesTableBg']//tr")); 

for (WebElement row : rows) { 
    WebElement secondColumn = row.findElement(By.xpath(".//td[2]")); 
    if(secondColumn.getText().equals("Magnus")) { 
     WebElement checkbox = row.findElement(By.xpath(".//td[1]/input")); 
     checkbox.click(); 
     break;  
    } 
} 
相關問題