ElementClickInterceptedException: Message: element click intercepted Element is not clickable error clicking a radio button using Selenium and Python

21,037

This error message...

selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: 
Element <input type="radio" name="docTypes" ng-model="$ctrl.documentTypes.selected" id="documentType-0" ng-change="$ctrl.onChangeDocumentType()" ng-value="documentType" tabindex="0" class="ng-pristine ng-untouched ng-valid ng-empty" value="[object Object]" aria-invalid="false"> 
is not clickable at point (338, 202). 
Other element would receive the click:
 <label translate-attr="{title: 'fulfillment.documentAction.createNew.modal.documentType.document.title'}" translate-values="{documentName: documentType.name}" for="documentType-0" translate="ASN - DSD" tabindex="0" title="Select ASN - DSD document type">...</label>

...implies that the desired element wasn't clickable as some other element obscures it.


The desired element is a Angular element so to invoke click() on the element you have to induce WebDriverWait for the element_to_be_clickable() and you can use either of the following Locator Strategies:

  • Using CSS_SELECTOR:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "label[for='documentType-0']"))).click()
    
  • Using XPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//label[@for='documentType-0']"))).click()
    
  • Note : You have to add the following imports :

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

Update

As an alternative you can use the execute_script() method as follows:

  • Using CSS_SELECTOR:

    driver.execute_script("arguments[0].click();", WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "label[for='documentType-0']"))))
    
  • Using XPATH:

    driver.execute_script("arguments[0].click();", WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//label[@for='documentType-0']"))))
    

References

You can find a couple of relevant discussions in:

Share:
21,037
Ryan Bobber
Author by

Ryan Bobber

Updated on July 22, 2022

Comments

  • Ryan Bobber
    Ryan Bobber almost 2 years

    I am trying to click on the first box (ASN / DSD)

    enter image description here

    But I get this error message:

    selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: 
    Element <input type="radio" name="docTypes" ng-model="$ctrl.documentTypes.selected" id="documentType-0" ng-change="$ctrl.onChangeDocumentType()" ng-value="documentType" tabindex="0" class="ng-pristine ng-untouched ng-valid ng-empty" value="[object Object]" aria-invalid="false"> 
    is not clickable at point (338, 202). 
    Other element would receive the click:
     <label translate-attr="{title: 'fulfillment.documentAction.createNew.modal.documentType.document.title'}" translate-values="{documentName: documentType.name}" for="documentType-0" translate="ASN - DSD" tabindex="0" title="Select ASN - DSD document type">...</label>
      (Session info: chrome=83.0.4103.116)
    

    I know I have entered the right iframe because it can find the element, just not click on it. My code is

    driver.switch_to.default_content()
    iframes = driver.find_elements_by_tag_name("iframe")
    driver.switch_to.frame(iframes[0])
    time.sleep(5)
    driver.find_element_by_xpath('//*[@id="documentType-0"]').click()
    

    I saw that DebanjanB answered a similar question on here: link

    I am trying to do his third solution of using execute script. I don't know what CSS selector to use for this model. The model looks like this

    WebDriverWait(driver, 20).until(EC.invisibility_of_element((By.CSS_SELECTOR, "span.taLnk.ulBlueLinks")))
    driver.execute_script("arguments[0].click();", WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='loadingWhiteBox']"))))
    

    My question is what css selector do I need to use on the first line, and then is it just initial xpath I was using on the second line?

    Here is the HTML for reference. I get the click intercept error when I try to click on the input section. If use xpath to click on the label tag, it does not error out but also does not click on it. It just moves on to the next section of code without doing anything.

    <li ng-repeat="documentType in selectDocumentType.documentTypes.displayedList |
    orderBy:selectDocumentType.formOrder"> 
    
    <input type="radio" name="docTypes" ng
    model="selectDocumentType.documentTypes.selected" id="documentType-0" ng-value="documentType"
    tabindex="0" class="ng-valid ng-not-empty ng-dirty ng-valid-parse ng-touched" value="[object Object]"
    aria-invalid="false"> 
    
    <label translate-attr="{title:'fulfillment.documentAction.createNew.modal.documentType.document.title'}" 
    translate-values={documentName: documentType.name}" for="documentType-0" translate="ASN - DSD" tabindex="0" title=
    "Select ASN - DSD document type"><span>ASN - DSD</span></label> </li>
    

    Any suggestions on how to stop having the click intercepted?