Установка флажка на основе значения столбца таблицы - IE Webdriver Selenium

Установка флажка на основе значения столбца таблицы с использованием 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')]

мое требование состоит в том, чтобы выбрать первый флажок (сделать что-то, например: добавить его в другую таблицу), снять его, а затем установить второй флажок (сделать что-то, например: добавить его в другую таблицу).


person Gauls    schedule 26.02.2014    source источник


Ответы (3)


Использование для МЭТЬЮ Пенни:

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

Использование для МЭТЬЮ Джо:

//td[contains(text(),'Joe')]/preceding-sibling::td/input[@name='chkNSelect']
person Sumitbit2005    schedule 26.02.2014
comment
потрясающе! предыдущий-sibling:: сотворил волшебство :), поэтому он все еще работает с Мэтью в нем Driver.FindElementByXPath(//td[contains(text(),'MATHEW Penny')]/preceding-sibling::td/input[@ имя='chkNSelect']).Click() - person Gauls; 26.02.2014

Он выбирает все элементы input с name как chkNSelect, которые идут перед td с текстом как MATHEW Penny.
Используйте

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

выбрать только первый такой вход

person Ajinkya    schedule 26.02.2014
comment
Это также не помогло, он всегда устанавливает первый флажок :( Я пытался использовать tr, который не устанавливает никаких флажков Driver.FindElementByXPath(//tr[td[contains(text(),'MATHEW Penny')]/ предыдущий::td/input[@name='chkNSelect']]).Click() - person Gauls; 26.02.2014

Вы можете попробовать:

  • первый таргетинг на 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']
person paul trmbrth    schedule 26.02.2014
comment
где закрывающая скобка ']' слова tr? - person Gauls; 26.02.2014
comment
Я добавил разбивку XPath - person paul trmbrth; 26.02.2014
comment
Driver.FindElementByXPath(//tr[td[contains(text(),'MATHEW Joe')]]/td/input[@name='chkNSelect']).Click() Он работает один раз, просто отмечает его во второй раз, когда выдает ошибка FindElementByXPath» не является членом «OpenQA.Selenium.IWebDriver - person Gauls; 26.02.2014