Home > OS >  What element do you target to click a checkbox with selenium webdriver?
What element do you target to click a checkbox with selenium webdriver?

Time:11-05

I am trying to click on a checkbox on a website using selenium webdriver. The HTML for the checkbox is this following:

<input type="checkbox" name="registrationForm:certIndCB" id="registrationForm:certIndCB" value="true" onclick="continueAction();">

I tried the following codes:

# first code
driver_wait = WebDriverWait(driver, 10)
cert_info = driver_wait.until(EC.element_to_be_clickable((By.ID, 'registrationForm:certIndCB')))
cert_info.click()
# second code
cert_info = driver.find_element(By.ID,'registrationForm:certIndCB')
cert_info.click()
# third code
cert_info = driver.find_element(By.XPATH, "//input[@id='registrationForm:certIndCB']")
cert_info.click()

But all have returned an error. The first code received a timeout error and the other two send this error:

---------------------------------------------------------------------------
NoSuchElementException                    Traceback (most recent call last)
Cell In[6], line 143
    139 time.sleep(3)
    141 # driver_wait = WebDriverWait(driver, 10)
    142 # cert_info = driver_wait.until(EC.element_to_be_clickable((By.ID, 'registrationForm:certIndCB')))
--> 143 cert_info = driver.find_element(By.ID,'registrationForm:certIndCB')
    144 cert_info.click()
    145 wait

I refreshed the page and made sure the elements were not flexing and the id stays as registrationForm:certIndCB. I was under the impression id was the better of the elements to select for a .click(). Does anyone might know why it cannot find the element despite it appearing when I inspect element?

CodePudding user response:

See below code for clicking a web element using JavaScript in python selenium:

time.sleep(5)
radioButton = driver.find_element(By.ID,'registrationForm:certIndCB')
driver.execute_script("arguments[0].click();", radioButton )

CodePudding user response:

When you use

(By.ID,'registrationForm:certIndCB')

Selenium converts it to a CSS selector

#registrationForm:certIndCB

and CSS selectors don't like ":"s in IDs. I've run into this issue before. I found that converting it to a different syntax of CSS selector worked for me.

[id="registrationForm:certIndCB"]

Below is your original code with a proper wait updated with the new CSS selector.

driver_wait = WebDriverWait(driver, 10)
cert_info = driver_wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '[id="registrationForm:certIndCB"]')))
cert_info.click()
  • Related