I have multiple tables on a website, I need to find the table with element that has text 'blabla' and then in that same table I will press a button, I tried this:
a = browser.find_element_by_xpath(f'//*[contains(text(),"blabla")]')
b = a.find_element_by_xpath('..')
browser.find_element_by_xpath(f'{b}/btn').click()
b --> <selenium.webdriver.remote.webelement.WebElement (session="0c5008a89c2da6d4b2e83f4237afc6ba", element="ef8fddcc-88fb-4947-b2c2-2e5ac400b5a1")>
but it gave me that this is an invalid xpath, as b is not the xpath but rather something else I don't understand, so does anyone have any idea how to do this correctly ? or if it is possible
EDIT: this is an example for a table
<tr style="height:30px;">
<td valign="top" style="width:50px;">
<b>Code:</b><br>
<a href="editcourse_lookup.aspx?coursecode=SB32173" target="_blank">
SB32173
</a>
<br>
<br>
Azan - Tajweed ul Quran Level 1
<br>
<a href="javascript:void(0);" onclick="window.open('learningplan_welcome.aspx?coursecode=SB32173&teacherid=365&studid=13150&regNo=22478','windowname1','width=900, height=600');return false;" target="_blank">View Report</a>
<br>
<a href="javascript:void(0);" onclick="window.open('Convert-report.aspx?coursecode=SB32173&teacherid=365&studid=13150&regNo=22478','windowname1','width=550, height=180');return false;" target="_blank">Convert Report</a>
<span id="ContentPlaceHolder3_gv_1To1CourseDetails_lblpuseddetails_0"></span>
<br>
<br>
<a href="editsubs.aspx?mode=Modify&courseCode=SB32173&sid=13150&[email protected]&g=All&type=s&parentpage=y" target="_blank">Edit</a>
<br>
<span id="ContentPlaceHolder3_gv_1To1CourseDetails_lblSubjectdetails_0" style="font-size:10px;"><b>Member Name:</b>Osman Khan<br><b>Subject:</b>Tajweed ul Quran Level 1<br><b>Curriculum:</b><br><b>Material:</b>Tajweed ul Quran Level 1</span>
</td><td align="center" style="width:130px;">
Wed, 04 Aug 2021
-
Wed, 29 Sep 2021
<br>
Wed, 1:00 AM - 2:00 AM<br>Fri, 1:00 AM - 2:00 AM<br>Sun, 3:00 PM - 4:00 PM
<br>
<a href="editCourse1To1.aspx?mode=Modify&courseCode=SB32173" id="ContentPlaceHolder3_gv_1To1CourseDetails_a_EditCourse_0" style="color: Blue;">Modify</a><br>
<a id="ContentPlaceHolder3_gv_1To1CourseDetails_a_NewSubscr_0" style="color: Blue;cursor:pointer;" title="Book New Subscription" onclick="window.open('addcourse_1To1.aspx?reg=old&mode=new&catid=1&coursecode=SB32173&studentid=13148&username=Irfan safdar&timezone=13&country=869&sid=13150&g=All&type=s','windowname1','location=1,status=1,scrollbars=1,width=900, height=650')">
Book New Subscription
</a>
<br><br>
<a onclick="return confirm('Are you Sure to Reschedule ?');" id="ContentPlaceHolder3_gv_1To1CourseDetails_lnkReschedule_0" title="Click to Reschedule" href="javascript:__doPostBack('ctl00$ContentPlaceHolder3$gv_1To1CourseDetails$ctl02$lnkReschedule','')">Reschedule</a>
</td><td align="center">
Fri, 1:00 AM - 2:00 AM<br>Sun, 3:00 PM - 4:00 PM<br>Wed, 1:00 AM - 2:00 AM<br>20<br>0.00<br><a href="popup/updatesubscriptionpackage.aspx?coursecode=SB32173&sid=13150&subsno=155534" target="_blank">Amend Default Subscription</a><br><br><a href="popup/Reschedule_Remaining_classes.aspx?coursecode=SB32173&mode=CD" target="_blank">Amend Current Subscription</a>
</td><td align="center">
Mohamed Sawy
<br>
<a href="Send_Email.aspx?emailcode=Teacher_Confirm&coursecode=SB32173&back_sid=13150&back_g=All&back_type=s">
Confirm()</a>
<br>
<a href="Send_Email.aspx?emailcode=Teacher_Cancel&coursecode=SB32173&back_sid=13150&back_g=All&back_type=s">
Cancel()</a>
<br><a target="_blank" href="PopUp/createmessage.aspx?mode=Teacher&tid=365"><img src="images/email.jpg" width="25" height="19"></a><a target="_blank" href="PopUp/SMSText.aspx?mode=Teacher&tid=365"><img src="images/text.jpeg" width="22" height="20"></a><a target="_blank" href="PopUp/call.aspx?mode=Teacher&tid=365" '=""><img src="images/iphone-call-icon.jpg" width="22" height="20"></a><a target="_blank" title="Student Notes" href="PopUp/teachernotes.aspx?tid=365" '=""><img src="images/notes.jpeg" width="22" height="20"></a>
<br>
<a href="popup/Update_Teacher.aspx?coursecode=SB32173" target="_blank">Change Teacher</a>
<br><br><a href="https://secure.examhelper.org/eaalim/teacher/calendar/default.aspx?tid=365" target="_blank">View Teacher Calendar</a>
</td><td align="center" style="width:50px;">
<span id="ContentPlaceHolder3_gv_1To1CourseDetails_lblinvoiceno_0">22478</span><br>
<span id="ContentPlaceHolder3_gv_1To1CourseDetails_lblinvoicedate_0">Wed, 04 Aug 2021</span>
</td><td align="center" style="width:50px;">
<a href="SendInvoice_1To1.aspx?coursecode=SB32173&back_sid=13150&back_g=All&back_type=s">
Invoice(0)</a>
</td><td align="center">
<span id="ContentPlaceHolder3_gv_1To1CourseDetails_lblNoOfLessons_0">20</span>
</td><td align="center" style="width:50px;">
<span id="ContentPlaceHolder3_gv_1To1CourseDetails_lblAttended_0">0</span>
</td><td align="center" style="width:50px;">
<span id="ContentPlaceHolder3_gv_1To1CourseDetails_lblAbsent_0">1</span>
</td><td align="center">
<span id="ContentPlaceHolder3_gv_1To1CourseDetails_lblMarkup_0">0 out of 5</span><br>
<a href="javascript:void(0);" onclick="window.open('edit-markup.aspx?coursecode=SB32173','windowname1','width=400, height=180');return false;" target="_blank">Modify</a>
</td><td align="center" style="width:50px;">
19
<hr>
<span id="ContentPlaceHolder3_gv_1To1CourseDetails_lblTotalLessonHtml_0" style="font-size:9px;"><b>Total Lessons:</b>20<br><b>Total Hrs:</b>20<br><b>Total Lessons Left:</b>19<br><b>Total Hrs Left:</b>5<br><b>Total Extra Lessons Left:</b>0<br><b>Total Extra Hrs Left:</b>0mins<br><b>Total Free Lessons Left:</b>0<br><b>Total Free Hrs Left:</b>0mins</span>
<hr>
<span id="ContentPlaceHolder3_gv_1To1CourseDetails_lblmissinglessons_0">20/20=0 missing</span>
</td><td align="right" style="width:50px;">
<span id="ContentPlaceHolder3_gv_1To1CourseDetails_lblcoursefee_0">0 £</span>
</td><td align="center">
<a href="viewlessons.aspx?courseid=SB32173&regno=22478&cname=Azan - Tajweed ul Quran Level 1" target="_blank">View</a><br><br><br>
<a href="popup/addCourseLesson.aspx?id=SB32173" target="_blank">
Add Lessons
</a>
</td><td align="center">
<span id="ContentPlaceHolder3_gv_1To1CourseDetails_lblBooked_0">Enroled </span>
</td><td align="center">
<a onclick="return confirm('Are you Sure to change Live Chat Status ?');" id="ContentPlaceHolder3_gv_1To1CourseDetails_lnkLiveChatStatus_0" title="Click to Active/InActive" href="javascript:__doPostBack('ctl00$ContentPlaceHolder3$gv_1To1CourseDetails$ctl02$lnkLiveChatStatus','')">Active</a>
</td><td align="center">
Active
<select name="ctl00$ContentPlaceHolder3$gv_1To1CourseDetails$ctl02$ddlStatus" onchange="return ShowConfirm(this);setTimeout('__doPostBack(\'ctl00$ContentPlaceHolder3$gv_1To1CourseDetails$ctl02$ddlStatus\',\'\')', 0)" id="ContentPlaceHolder3_gv_1To1CourseDetails_ddlStatus_0" style="border-color:#999999;border-width:1px;border-style:Solid;font-family:Verdana;font-size:11px;">
<option selected="selected" value="">Change Status</option>
<option value="Active">Active</option>
<option value="Archive">Archive</option>
<option value="Inactive">Inactive</option>
<option value="Cancelled">Cancelled</option>
</select>
<br> <br>
<select name="ctl00$ContentPlaceHolder3$gv_1To1CourseDetails$ctl02$ddlAction" onchange="javascript:setTimeout('__doPostBack(\'ctl00$ContentPlaceHolder3$gv_1To1CourseDetails$ctl02$ddlAction\',\'\')', 0)" id="ContentPlaceHolder3_gv_1To1CourseDetails_ddlAction_0" style="border-color:#999999;border-width:1px;border-style:Solid;font-family:Verdana;font-size:11px;width:170px;">
<option selected="selected" value="">Pause Course - select</option>
<option value="Pause Course">Pause Course with pending lessons</option>
</select>
</td><td align="center">
</td><td align="center">
<select name="ctl00$ContentPlaceHolder3$gv_1To1CourseDetails$ctl02$drpwhiz" id="ContentPlaceHolder3_gv_1To1CourseDetails_drpwhiz_0" style="border-color:#999999;border-width:1px;border-style:Solid;font-family:Verdana;font-size:11px;">
<option selected="selected" value="999,zoomfree">Zoom Free</option>
<option value="1,braincert">Braincert</option>
<option value="1,wiziq">WizIQ 25</option>
<option value="2,wiziq">WizIQ 100</option>
<option value="3,wiziq">WizIQ 500</option>
</select>
<br>
<a id="ContentPlaceHolder3_gv_1To1CourseDetails_lnkswhiz_0" href="javascript:__doPostBack('ctl00$ContentPlaceHolder3$gv_1To1CourseDetails$ctl02$lnkswhiz','')">Go</a>
<br>
<a onclick="alert('You have already generated the lesson url for this course.');" id="ContentPlaceHolder3_gv_1To1CourseDetails_lnkGenUrl1_0" title="Already Generated" href="javascript:__doPostBack('ctl00$ContentPlaceHolder3$gv_1To1CourseDetails$ctl02$lnkGenUrl1','')">Generated</a>
<hr>
<a onclick="return confirmGenUrl();" id="ContentPlaceHolder3_gv_1To1CourseDetails_LinkButton1_0" title="Click to Generate url" href="javascript:__doPostBack('ctl00$ContentPlaceHolder3$gv_1To1CourseDetails$ctl02$LinkButton1','')">Re-Generate Existing URL</a>
</td><td align="center">
<a onclick="return confirm('Are sure want to request for ecertficate?');" id="ContentPlaceHolder3_gv_1To1CourseDetails_lnkRequestCertificate_0" href="javascript:__doPostBack('ctl00$ContentPlaceHolder3$gv_1To1CourseDetails$ctl02$lnkRequestCertificate','')">Request eCertificate(0)</a>
<br>
<a href="Certificate-logs.aspx?coursecode=SB32173" target="_blank">Send Certificate</a>
<br>
<a onclick="return confirm('Are you Sure to Delete ?');" id="ContentPlaceHolder3_gv_1To1CourseDetails_lnkactive11_0" title="Click to Delete" href="javascript:__doPostBack('ctl00$ContentPlaceHolder3$gv_1To1CourseDetails$ctl02$lnkactive11','')">Delete</a>
<br>
<a id="ContentPlaceHolder3_gv_1To1CourseDetails_lnkstatusActive_0" href="javascript:__doPostBack('ctl00$ContentPlaceHolder3$gv_1To1CourseDetails$ctl02$lnkstatusActive','')">Active SMS</a>
<br>
<select name="ctl00$ContentPlaceHolder3$gv_1To1CourseDetails$ctl02$ddlclasstype" onchange="javascript:setTimeout('__doPostBack(\'ctl00$ContentPlaceHolder3$gv_1To1CourseDetails$ctl02$ddlclasstype\',\'\')', 0)" id="ContentPlaceHolder3_gv_1To1CourseDetails_ddlclasstype_0" style="border-color:#999999;border-width:1px;border-style:Solid;font-family:Verdana;font-size:11px;">
<option selected="selected" value="Auto">Auto</option>
<option value="Manual">Manual</option>
</select>
</td>
</tr>
to answer this part
is there a way to locate a parent of a certain element and then in that parent you locate a button
Let's say this is the xpath :
//*[contains(text(),"blabla")]
you can use /.. or /parent::node-name to reach to the parent node.
Let's understand from the example :-
//*[contains(text(),"blabla")]/..
should locate the Parent node, of //*[contains(text(),"blabla")]
also in case you want to have parent filter, you can equivalently use :-
//*[contains(text(),"blabla")]/parent::div[@id='some id']
in this case it will look for parent div (this is just an example) who has id equals to some id
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With