使用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')]
我的要求是选择第一个复选框(执行某些操作,例如:将其添加到另一个表中)取消选中它,然后选中第二个复选框(执行某些操作,例如:将其添加到另一个表中)。
答案 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
元素,name
为chkNSelect
,td
之前的文字为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']