2013-10-07 71 views
0

我目前正在工作的java/selenium webdriver自動化。不過,我被困在這個特定的部分,我無法使webdriver點擊複選框基於值。 ();}}。點擊();}();}}。點擊();硒webdriver - 點擊複選框基於表值

它工作的時候我沒有使用XPath的軸部分,但它只能選擇第一個複選框

下面是HTML

<tr class="even"> 
<td style="width: 20px;"> 
<input class="chkPopupCod" type="checkbox">codData=Object { id=101914, codId=101906, label="AAA", more...} 
</td> 
<td class="" align="left">AAA</td> 
</tr> 
<tr class="odd"> 
<td style="width: 20px;"> 
<input class="chkPopupCod" type="checkbox" style="background-color: rgb(255, 255, 255);">codData=Object { id=101918, codId=101907, label="BBB", more...} 
</td> 
<td class="" align="left" style="background-color: transparent;">BBB</td> 
</tr> 
<tr class="even"> 
<td style="width: 20px;"> 
<input class="chkPopupCod" type="checkbox">codData=Object { id=101922, codId=101908, label="CCC", more...} 
</td> 
<td class="" align="left">CCC</td> 
</tr> 

回答

2

的片段你必須在正確的想法你XPath的。就在翻轉:

//td[contains(text(),'BBB')]/preceding::td/input[@class='chkPopupCod'] 

如,獲取其內部具有第一的文本元素。之後,通過樹你的方式。

+0

太棒了!它的作品 'driver.findElement(By.xpath(「// td [contains(text(),'BBB)]/preceding-sibling :: td/input [@ class ='chkPopupCod']」))。click ();' 非常感謝Arran! – user2853922

0

使用表格時,我總是喜歡先識別出我正在處理的表格行。爲此,我有一種方法將表格行返回給我,然後從那裏開始尋找我希望使用的元素。

例子: 方法獲取父錶行 -

public void IWebElement GetParentTableRow(IWebElement element) 
    { 
     while (!element.TagName.ToLower().Equals("tr")) 
     { 
      try 
      { 
       element = element.FindElement(By.XPath("..")); //Returns the parent 
      } 
      catch 
      { 
       return null; 
      } 
     } 

     return element; 
    } 

用法 -

public void Test() 
{ 
    IWebElement tableRow = GetParentTableRow(driver.FindElement(By.XPath("//td[contains(text(),'BBB')]")); 
    tableRow.FindElement(By.ClassName("chkPopupCod")).Click(); 
} 

希望它能幫助。 :)