I am having trouble abbreviating the following selenium CSS code which has the element inside multiple tables. The code below gives me two checkboxes.
table[id$=gridReports]>tbody>tr:nth-of-type(2)>td:nth-of-type(2)>table[id$=panelReportInformation]>tbody>tr:nth-of-type(2)>td>table[id$=panelReportContent]>tbody>tr:nth-of-type(2)>span[id$=reportCheckBox] input
I cannot use this code since there is also another table with the same span and checkbox. The only difference is that the it is in different row. So if i put the code for another checkbox, it would look like this.
table[id$=gridReports]>tbody>tr:nth-of-type(3)>td:nth-of-type(2)>table[id$=panelReportInformation]>tbody>tr:nth-of-type(2)>td>table[id$=panelReportContent]>tbody>tr:nth-of-type(2)>span[id$=reportCheckBox] input
So the only difference is nth-of-type(i) for every table. So how can i shorten the css code?
Is there any option that i can shorten like table[id$=gridReports]>tbody>tr:nth-of-type(i) followed by span[id$=reportCheckBox] input.
Any help would be appreciated.
Thanks
You could shorten it by narrowing your universe
el = driver.find_element_by_css_selector("table[id$=gridReports]>tbody>tr:nth-of-type(3)")
el.find_element_by_css_selector("span[id$=reportCheckBox] input")
OR
els = driver.find_elements_by_css_selector("span[id$=reportCheckBox] input")
for el in els:
el.click()
That's in python but same idea in all bindings as you can chain a webelement request to a previous webdriver element