Search code examples
reactjsseleniumxpathcucumberjs

Get index of the specific td in tr by XPath


I have thead and tbody in the table. Thead contains a few s in . Each of it have an id. I need to find the index of td in thead by id and then find by index in tbody.

<table>
  <thead>
   <tr>
     <td data-date="2019-08-05"></td>
     <td data-date="2019-08-06"></td> //find index of this element
     <td data-date="2019-08-07"></td>
   </tr>
  </thead>
  <tbody>
   <tr>
    <td>aaa</td>
    <td>bbb</td> //find this element by found index
    <td>ccc</td>
   </tr>
  </tbody>
</table>
 upd
<table>
  <thead>
   <tr>
     <td data-date="2019-08-05"></td>
     <td data-date="2019-08-06"></td> 
     <td data-date="2019-08-07"></td> 
     <td data-date="2019-08-08"></td> //find index of this element
     <td data-date="2019-08-09"></td>
   </tr>
  </thead>
  <tbody>
   <tr>
    <td rowspan="2"></td>
    <td rowspan="2" class="rrrr">event1 2019-08-06</td>
    <td class="rrrr">event1 2019-08-07</td>
    <td class="rrrr"event1 2019-08-08</td> //find this element by found index
    <td rowspan="2"></td>
   </tr>
   <tr>
    <td class="rrrr">event2 2019-08-07</td>
    <td class="rrrr">event2 2019-08-08</td> //find this element by found index
   </tr>
  </tbody>
</table>

Solution

  • This xpath expression

    //tbody//td[count(//thead//td[@data-date='2019-08-06']/preceding-sibling::*)+1]
    

    selects

    <td>bbb</td>