Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于Java的Selenium2:当源包含相同元素两次时,通过前面的同级查找元素_Java_Html_Xpath_Selenium Webdriver - Fatal编程技术网

基于Java的Selenium2:当源包含相同元素两次时,通过前面的同级查找元素

基于Java的Selenium2:当源包含相同元素两次时,通过前面的同级查找元素,java,html,xpath,selenium-webdriver,Java,Html,Xpath,Selenium Webdriver,我想单击前面同级节点的文本相关输入。我的HTML如下所示: <FORM id="formid" onsubmit="" method=post name="formid" action=> <TABLE width="100%"> <TR class=foo-even> <TD rowSpan=3><INPUT onclick="" value=1 type=radio name="

我想单击前面同级节点的文本相关输入。我的HTML如下所示:

   <FORM id="formid" onsubmit="" method=post name="formid" action=>
      <TABLE width="100%">
         <TR class=foo-even>
            <TD rowSpan=3><INPUT onclick="" value=1 type=radio name="formid">upbutton1</TD>
            <TD>Pearl</TD>
            <TD rowSpan=3></TD>
         </TR>
         <TR class=foo-even>
            <TD>ravenclawn</TD>
         </TR>
         <TR class=foo-even>
            <TD>ravenclawn</TD>
         </TR>
         </TBODY>
      </TABLE>
      </TD></TR>
      <TR>
         <TD> </TD>
      </TR>
      </TBODY></TABLE>
      <TABLE width="100%" >
      <TBODY>
         <TR>
            <TD class="someclass"></TD>
         </TR>
         <TR>
            <TD>
               <TABLE class=foo width="100%" border="1px">
      <TBODY>
         <TR class=foo-header>
            <TD></TD>
            <TD><BR></TD>
            <TD colSpan=3></TD>
            <TD></TD>
         </TR>
         <TR class=foo-odd>
            <TD><INPUT value=0 type=radio name="formid.samename">buttonclick1</TD>
            <TD>1234</TD>
            <TD>blue </TD>
            <TD colSpan=2>apple2</TD>
            <TD> <INPUT value=0 type=hidden name="samenameagain"></TD>
         </TR>
         <TR class=foo-even>
            <TD><INPUT value=1 type=radio name="formid.samename">buttonclick2</TD>
            <TD>1235 </TD>
            <TD>blue </TD>
            <TD colSpan=2>apple3</TD>
            <TD> <INPUT value=0 type=hidden name="samenameagain"> </TD>
         </TR>
         <TR class=foo-odd>
            <TD><INPUT value=2 type=radio name="formid.samename">buttonclick3</TD>
            <TD>1235</TD>
            <TD>sometext </TD>
            <TD>Pearl</TD>
            <TD></TD>
            <TD> <INPUT value=0 type=hidden name="samenameagain"> </TD>
         </TR>
         <TR class=foo-even>
            <TD><INPUT value=3 type=radio name="formid.samename">buttonclick4</TD>
            <TD>1236 </TD>
            <TD>blue </TD>
            <TD colSpan=2>apple4</TD>
            <TD> <INPUT value=0 type=hidden name="samenameagain"> </TD>
         </TR>
         <TR class=foo-odd>
            <TD><INPUT value=4 type=radio name="formid.samename">buttonclick5</TD>
            <TD>1236 </TD>
            <TD>sometext </TD>
            <TD>ravenclawn</TD>
            <TD></TD>
            <TD> <INPUT value=0 type=hidden name="samenameagain"> </TD>
         </TR>
         <TR class=foo-even>
            <TD><INPUT value=5 type=radio name="formid.samename">buttonclick6</TD>
            <TD>1237 </TD>
            <TD>blue </TD>
            <TD colSpan=2>apple6</TD>
            <TD> <INPUT value=0 type=hidden name="samenameagain"> </TD>
         </TR>
         <TR class=foo-odd>
            <TD><INPUT value=6 type=radio name="formid.samename">buttonclick7</TD>
            <TD>1237 </TD>
            <TD>sometext </TD>
            <TD>ravenclawn</TD>
            <TD></TD>
            <TD> <INPUT value=0 type=hidden name="samenameagain"></tD>
   </DIV>
     driver.findElement(By.xpath(".//td[contains(text(),'Pearl')][1]/preceding-sibling::td")).click();

问题: 上面的代码始终使用包含Pearl文本的第一个表

意见:

  • 这种情况下,当我修改第一珍珠文本的其他东西的代码工作良好
  • 这种情况下,当我与另一个文本ect工作:“ravenclawn”它的工作没有任何修改罚款

感谢您的建议,您只需为表添加索引即可

For 1st table
By.xpath("//table[1]//td[contains(text(),'Pearl')]/preceding-sibling::td")

For 2nd table
By.xpath("//table[2]//td[contains(text(),'Pearl')]/preceding-sibling::td")

“单击第二个与文本相关的输入字段”->,但XPath以
td
结尾?是的,它以td结尾,但当Click()命令usedIts与上面的HTML配合使用时,它也可以与输入配合使用,但表已填充,但它在最终解决方案中帮助了我,谢谢