I want to click on a button in a row using XPath if the cell within the certain row contains the text Reconciliation.
Below is the html of the website (I cannot share the link because it's an internal website):
<tbody>
<tr class="header">
<th scope="col" style="width:25px;"> </th>
<th scope="col" style="width:25px;"> </th>
<th scope="col" style="width:25px;"> </th>
<th align="center" scope="col" style="width:50px;">ID</th>
<th align="center" scope="col" style="width:200px;">Project</th>
<th align="center" scope="col" style="width:300px;">Task</th>
<th align="center" scope="col" style="width:100px;">Lock</th>
<th align="center" scope="col" style="width:100px;">Person</th>
<th align="center" scope="col" style="width:100px;">First Date</th>
<th align="center" scope="col" style="width:130px;">Second Date</th>
</tr>
<tr>
<td><span><a href="/placeholder/DisplayTask.aspx?taskWflId=UADMERR2-PBIZCAL2-974f892e-eb51-42b7-bef6-6587ec7f76a2&wklist=ADMIN&prjId=12345&prd=1" target="_self"><img src="/sth/open.gif" border="0" alt="Open this task"></a></span></td>
<td><span><a href="/placeholder/DisplayProcessHistory.aspx?prjId=12345&prd=1" target="_blank"><img src="/sth/history.gif" border="0" alt="Show project history"></a></span></td>
<td><span><a href="/placeholder/DisplayProcessStatus.aspx?prjId=12345&prd=1" target="_blank"><img src="/sth/roadmap.gif" border="0" alt="Show project roadmap"></a></span></td>
<td><span><a href="Worklist.aspx?IssueSourceIds=12345" target="_self" style="text-decoration:none">12345</a></span></td>
<td><span>"Product name placeholder"</span></td>
////Referenetial is in the line below
<td><span><span class="error">Reconciliation Error</span><br>A technical error has occured.</span></td>
<td><span></span></td>
<td><span>ADMIN</span></td>
<td><span>01-08-2022</span></td>
<td><span>01-08-2022 13:26:07</span></td>
</tr>
<tr class="alternate">
<td><span><a href="/placeholder/DisplayTask.aspx?taskWflId=UFUPPUB1-MLOTFUP1-332ce59b-7773-4098-9dd0-0a3ae790dea1&wklist=FOLLOW_UP&prjId=12345&prd=1" target="_self"><img src="/sth/open.gif" border="0" alt="Open this task"></a></span></td>
<td><span><a href="/placeholder/DisplayProcessHistory.aspx?prjId=12345&prd=1" target="_blank"><img src="/sth/history.gif" border="0" alt="Show project history"></a></span></td>
<td><span><a href="/placeholder/DisplayProcessStatus.aspx?prjId=12345&prd=1" target="_blank"><img src="/sth/roadmap.gif" border="0" alt="Show project roadmap"></a></span></td>
<td><span><a href="Worklist.aspx?IssueSourceIds=12345" target="_self" style="text-decoration:none">12345</a></span></td>
<td><span>"Product name placeholder"</span></td>
<td><span><span class="followup">Issue Follow Up</span><br>Summary & Status.<br>Concerned issue: "Product name placeholder"</span></td>
<td><span></span></td>
<td><span>FOLLOW_UP</span></td>
<td><span>01-08-2022</span></td>
<td><span>29-07-2022 10:05:07</span></td>
</tr>
<tr>
<td><span><a href="/placeholder/DisplayTask.aspx?taskWflId=UFUPADM1-MLOTFUP1-d02d29e7-f2c7-4a1c-9313-62ff652c1aa4&wklist=ADMIN&prjId=12345&prd=1" target="_self"><img src="/sth/open.gif" border="0" alt="Open this task"></a></span></td>
<td><span><a href="/placeholder/DisplayProcessHistory.aspx?prjId=12345&prd=1" target="_blank"><img src="/sth/history.gif" border="0" alt="Show project history"></a></span></td>
<td><span><a href="/placeholder/DisplayProcessStatus.aspx?prjId=12345&prd=1" target="_blank"><img src="/sth/roadmap.gif" border="0" alt="Show project roadmap"></a></span></td>
<td><span><a href="Worklist.aspx?IssueSourceIds=12345" target="_self" style="text-decoration:none">12345</a></span></td>
<td><span>"Product name placeholder"</span></td>
<td><span><span class="followupAdmin">Issue Follow Up ADMIN</span><br>Summary, Status & Admin Tools.<br>Concerned issue: "Product name placeholder"</span></td>
<td><span></span></td>
<td><span>ADMIN</span></td>
<td><span>01-08-2022</span></td>
<td><span>29-07-2022 10:05:07</span></td>
</tr>
</tbody>
May I ask how could this be achieved?
The <td>
containing the text Reconciliation is:
<td>
<span>
<span class="error">Reconciliation Error</span>
<br>
A technical error has occured.
</span>
</td>
To click on the element you need to induce WebDriverWait for the element_to_be_clickable() and you can use either of the following locator strategies:
Clicking <span>
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//td/span[.//span[contains(., 'Reconciliation')]]"))).click()
Clicking <td>
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//td[./span[.//span[contains(., 'Reconciliation')]]]"))).click()
Note: You have to add the following imports :
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC