2013-10-07 40 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(); 
} 

希望它能帮助。 :)