NameError: name 'number' is not defined using css-selector as nth-child(n) with Selenium and Python

Viewed 194
click = self.driver_web_browser.find_element_by_css_selector('#ctl00_ContentPlaceHolder1_Estadocombo > option:nth-child('+ index +').click()

Error:

click = self.driver_web_browser.find_element_by_css_selector('#ctl00_ContentPlaceHolder1_Estadocombo > option:nth-child('+ index +')').click()
NameError: name 'number' is not defined

If i put in a non dynamic value inside nth-child(46) it works fine .

However id like to put nth-child(index)

Code trials:

basecss = '#ctl00_ContentPlaceHolder1_Estadocombo > option'
events = self.driver_web_browser.find_elements_by_css_selector(basecss)


for index, val in enumerate(events, 1):
    name = self.driver_web_browser.find_elements_by_css_selector("{}:nth-child({})".format( basecss,index))

    print(index,val.text)

    if self.state == val.text:
        #event = self.driver_web_browser.find_element_by_css_selector(basecss + ("{}:nth-child({})").click())
        click = self.driver_web_browser.find_element_by_css_selector('#ctl00_ContentPlaceHolder1_Estadocombo > option:nth-child('+ index +')').click()
        print(type(click))
        break 
1 Answers

As a part of enumerate, 1 is passed as a integer and you need to convert it into string using str() as follows:

name = self.driver_web_browser.find_elements_by_css_selector("{}:nth-child({})".format( basecss, str(index)))
Related