【问题标题】:Clicking on checkbox based on tables column value - IE Webdriver Selenium单击基于表列值的复选框 - IE Webdriver Selenium
【发布时间】:2014-02-26 10:54:31
【问题描述】:

使用 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')]

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

【问题讨论】:

    标签: selenium xpath selenium-webdriver xpath-2.0


    【解决方案1】:

    用于 MATHEW Penny:

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

    用于 MATHEW Joe:

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

    【讨论】:

    • 棒极了! previous-sibling:: 完成了魔法 :) 所以它仍然可以在其中使用 Mathew Driver.FindElementByXPath("//td[contains(text(),'MATHEW Penny')]/preceding-sibling::td/input[ @name='chkNSelect']").Click()
    【解决方案2】:

    它选择所有带有nameinput 元素为chkNSelect,在td 之前,文本为MATHEW Penny
    使用

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

    只选择第一个这样的输入

    【讨论】:

    • 这也无济于事,它总是选择第一个复选框:(我尝试使用不选中任何框的 tr Driver.FindElementByXPath("//tr[td[contains(text( ),'MATHEW Penny')]/preceding::td/input[@name='chkNSelect']]").Click()
    【解决方案3】:

    你可以试试:

    • 首先针对tr
    • 包含td 和您想要的文本节点(使用谓词)
    • 然后转到该表行中 td 内的 input

    因此翻译为:

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

    细分:

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

    【讨论】:

    • tr的右括号']'在哪里?
    • 我添加了 XPath 的分解视图
    • Driver.FindElementByXPath("//tr[td[contains(text(),'MATHEW Joe')]]/td/input[@name='chkNSelect']").Click()它工作一次只是在第二次抛出错误 FindElementByXPath' is not a member of 'OpenQA.Selenium.IWebDriver
    猜你喜欢
    • 2016-11-19
    • 2018-04-24
    • 2015-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-14
    • 2015-12-07
    相关资源
    最近更新 更多