单击基于表列值的复选框 - IE Webdriver Selenium

时间:2014-02-26 10:54:31

标签: selenium xpath selenium-webdriver xpath-2.0

使用Xpath单击基于表列值的复选框。下面是html

  <table id="tblHotels"> 
  <TBODY> 
    <TR> 
      <TH align="left"> 
        <INPUT checkbox="" id="chkNSelectAll  name=chkNSelectAll  type="/> 
      </TH>  
      <TH align="left" title="Hotel">Hotel</TH>  
      <TH title=" align=left"> 
        <SPAN id="spnExpandBtn">
          <IMG/>
        </SPAN> 
      </TH>  
      <TH align="left" title="Hotel">Hotel</TH>  
      <TH align="left" title="Reg Date">Reg Date</TH>  
      <TH align="left" title="Room Type">Room Type</TH>  
      <TH align="left" title="Location">Location</TH>  
      <TH align="left" title="Room Number">Room Number</TH> 
    </TR>  
    <TR> 
      <TD colSpan="11"> 
        <IMG src=" ../NoExpiry/images/uaimBSpacer.gif"/> 
      </TD> 
    </TR>  
    <TR> 
      <TD> 
        <INPUT id="chkNSelect" name="chkNSelect" type="checkbox" value="on"/> 
      </TD>  
      <TD customHiddenText="">MATHEW Joe</TD>  
      <TD/>  
      <TD customHiddenText=""> 
        <SPAN>Affray (
          <STRONG/>Kim Lee)
        </SPAN> 
      </TD>  
      <TD class="regDate customHiddenText=">10/01/2014</TD>  
      <TD customHiddenText="">1HE</TD>  
      <TD customHiddenText="">South West </TD>  
      <TD id="tdChildroom name=" tdChildroom=""/>  
      <INPUT id="hidYID" name="hidYID" type="hidden" value="409"> 
        <INPUT id="hidYD" name="hidYD" type="hidden"> 
          <INPUT id="hidYDID" name="hidYDID" type="hidden" value="1015389"/> 
        </INPUT> 
      </INPUT> 
    </TR>  
    <TR> 
      <TD> 
        <INPUT id="chkNSelect" name="chkNSelect" type="checkbox" value="on"/> 
      </TD>  
      <TD customHiddenText="">MATHEW Penny</TD>  
      <TD/>  
      <TD customHiddenText=""> 
        <SPAN>Affray (
          <STRONG/>Jim Lee)
        </SPAN> 
      </TD>  
      <TD class="regDate customHiddenText=">10/01/2014</TD>  
      <TD customHiddenText="">1HE</TD>  
      <TD customHiddenText="">South West </TD>  
      <TD id="tdChildroom name=" tdChildroom=""/>  
      <INPUT id="hidYID" name="hidYID" type="hidden" value="409"> 
        <INPUT id="hidYD" name="hidYD" type="hidden"> 
          <INPUT id="hidYDID" name="hidYDID" type="hidden" value="1015389"/> 
        </INPUT> 
      </INPUT> 
    </TR> 
  </TBODY> 
</table>

这是我正在尝试的,这总是点击第一个复选框??

Driver.FindElementByXPath("//td[contains(text(),'MATHEW Penny')]/preceding::td/input[@name='chkNSelect']").Click() 

如果我试图找到带有文本的列,它可以找到它为什么它找不到前面的复选框并跳转到第一行复选框?

 Driver.FindElementByXPath("//td[contains(text(),'MATHEW Penny')]

我的要求是选择第一个复选框(执行某些操作,例如:将其添加到另一个表中)取消选中它,然后选中第二个复选框(执行某些操作,例如:将其添加到另一个表中)。

3 个答案:

答案 0 :(得分:2)

用于MATHEW Penny:

//td[contains(text(),'Penny')]/preceding-sibling::td/input[@name='chkNSelect']

用于MATHEW Joe:

//td[contains(text(),'Joe')]/preceding-sibling::td/input[@name='chkNSelect']

答案 1 :(得分:0)

选择所有input元素,namechkNSelecttd之前的文字为MATHEW Penny
使用

//td[contains(text(),'MATHEW Penny')]/preceding::td/input[last()][@name='chkNSelect']  

仅选择第一个此类输入

答案 2 :(得分:0)

你可以尝试:

  • 首先定位tr
  • 包含td所需的文本节点(使用谓词)
  • 然后转到该表格行input内的td

因此转换为:

Driver.FindElementByXPath("//tr[td[contains(text(),'MATHEW Penny')]]/td/input[@name='chkNSelect']")

故障:

//tr[
        td[
              contains(text(),'MATHEW Penny')
          ]
    ]
    /td/input[@name='chkNSelect']