I want to click on a button in a row using XPath if the cell within the certain row contains the text "Reconciliation". May I ask how could this be achieved? Thank you very much in advance. Below is the html of the website (I cannot share the link because it's an internal website):
<tbody>
<tr >
<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 >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 >
<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 >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 >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>
CodePudding user response:
If you want to click on the element by substring of text, you can use text()
selector
Below gives you element that contains text Reconciliation
element = driver.find_element(by=By.XPATH,value="//*[text()[contains(.,'Reconciliation')]]")
element.click()
CodePudding user response:
I would do something like the following. It will dynamically find the "Reconciliation" text in a row even when the table might contain more or less rows than you posted. It will then click the first link, under ID, in the same row.
table = driver.find_element_by_tag_name("table")
rows = table.find_elements_by_tag_name("tr")
for row in rows:
if row.get_attribute("class") != "header": # skip the header row
# get the contents of the span
spanContent = row.find_element_by_css_selector("td:nth-of-type(6) > span").get_attribute("innerHTML")
if (spanContent.find("Reconciliation") != -1): # find the text, -1 is not found
# click the first link (ID) in this row
row.find_element_by_css_selector("td:nth-of-type(1) > span > a > img").click()
break