基于Java的selenium webdriver-单击按行文本动态更改表内容中的元素(单击同一行中的按文本输入)

基于Java的selenium webdriver-单击按行文本动态更改表内容中的元素(单击同一行中的按文本输入),java,html,selenium,xpath,Java,Html,Selenium,Xpath,我被基于java的selenium的用法所束缚,我喜欢通过另一个单元格文本值单击输入框(在表中) 以下是我的HTML代码: <DIV class=> <P class=></P> <UL></UL> <FORM id="" onsubmit="" method=post name="" action=""> <TABLE width="100%"> <TBODY> <TR> <TD

我被基于java的selenium的用法所束缚,我喜欢通过另一个单元格文本值单击输入框(在表中)

以下是我的HTML代码:

<DIV class=>
<P class=></P>
<UL></UL>
<FORM id="" onsubmit="" method=post name="" action="">
<TABLE width="100%">
<TBODY>
<TR>
<TD class=></TD></TR></TBODY></TABLE>
<TABLE>
<TBODY>
<TR>
<TD class=></TD></TR>
<TR>
<TD>
<TABLE class="" width="70%">
<TBODY>
<TR class="">
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD></TR>
<TR class="">
<TD><INPUT class="" onclick="" CHECKED type=checkbox><INPUT id= value=true type=hidden name=""> </TD>
<TD></TD>
<TD></TD>
<TD></TD></TR></TBODY></TABLE></TD>
<TR>
<TD><INPUT id="" class= onclick='' value="" type=button name=></TD></TR></TR></TBODY></TABLE>
<TABLE width="100%">
<TBODY>
<TR>
<TD class=""></TD></TR>
<TR>
<TD>
<TABLE class=foo width="100%">
<TBODY>
<TR class=foo-header>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD></TR>
<TR class="foo-odd">
<TD><INPUT onclick="" value="0" type="radio" name=""> </TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD></TR>
<TR class="foo-even">
<TD rowSpan="3"><INPUT onclick="" value="1" CHECKED type="radio" name=""> </TD>
<TD rowSpan="3"></TD>
<TD rowSpan="3"></TD>
<TD rowSpan="3"></TD>
<TD rowSpan="3"></TD>
<TD rowSpan="3"></TD>
<TD rowSpan="3"></TD>
<TD></TD>
<TD rowSpan="3"><INPUT id="" class="" value="" type="" name=""></TD></TR>
<TR class="foo-even">
<TD></TD></TR>
<TR class="foo">
<TD>CCC</TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD><INPUT class="" onclick="" type=checkbox><INPUT id="" value="false" type="hidden" name=""> </TD></TR></TBODY></TABLE>
<TABLE width="100%">
<TBODY>
<TR>
<TD class=""></TD></TR>
<TR>
<TD>
<TABLE class="foo" width="100%">
<TBODY>
<TR class="foo-header">
<TD></TD>
<TD><BR><INPUT id="" class="" onclick="" value="" type="button" name=""></TD>
<TD colSpan="3"></TD>
<TD></TD></TR>
<TR class="foo-odd">
<TD><INPUT value="0" type="radio" name=""> </TD>
<TD></TD>
<TD></TD>
<TD colSpan="2"></TD>
<TD><SELECT class="" name=""> <OPTION value="0"></OPTION> <OPTION selected value="1"></OPTION></SELECT> </TD></TR>
<TR class="foo-even">
<TD rowSpan="2"><INPUT value="1" type="radio" name=""> </TD>
<TD rowSpan="2"></TD>
<TD rowSpan="2"></TD>
<TD></TD>
<TD></TD>
<TD rowSpan="2"><SELECT class="" name=""> <OPTION value="0"></OPTION> <OPTION selected value="1"></OPTION></SELECT> </TD></TR>
<TR class="foo">
<TD>CCC</TD>
<TD></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE width="100%">
<TBODY></TBODY></TABLE>
<TABLE width="100%">
<TBODY>
</DIV>
上面在*非常相似的html中工作的代码只包含一次CCC(用另一个html代码测试)

上面的代码能够找到文本,但当与顶层代码(/previous sibling::td)结合使用时,它无法找到输入


请帮助。请提前感谢表达式
td[1][contains(text(),'CCC')]
选择第一个
td
并测试其文本是否包含
CCC


将其替换为
td[contains(text(),'CCC')][1]

感谢您的快速回复,但我喜欢单击表/行中与文本相关的输入字段,而不仅仅是文本[code]。//td[contains(text(),'CCC')][1]/前面的同级::td[/code]:无法使用xpath查找元素==我看不出其余部分有任何问题。你是如何将两者结合起来的?//td[contains(text(),'CCC')][1]第1部分:你建议工作得很好,但我认为代码的第二部分/前面的同级::td——完全合并的代码:[code]。//td[contains(text(),'CCC')][1]/前面的同级::td[/code]确实:你选择的
td
没有前面的同级!您要查找的是树中的上一个
td
,但该
td
没有相同的父项。感谢您的帮助,现在我离最终解决方案更近了,但上面的代码由后端信息填充-表大小正在按情况更改,当前我正在处理以下内容:[code]//td[contains(text(),'CCC')][1][last()]/following::tbody/tr/td/table/tbody/tr[3]/td/input[/code],上述情况下工作正常,但当CCC位于另一个位置时,代码会单击以始终保持相同的非相关输入
 driver.findElement(By.xpath(".//td[contains(text(),'CCC')]/preceding-sibling::td")).click();
WebElement services = driver.findElement(By.xpath(".//*[@id='installationAddressForm']/table[4]/tbody/tr[2]/td/table/tbody/tr[4]/td[1][contains(text(),'CCC')]"));
         String contents = services.getText();
         System.out.println(contents);