ElementClickInterceptedException:消息:元素单击被拦截元素不可单击错误,使用Selenium和Python单击单选按钮 [英] ElementClickInterceptedException: Message: element click intercepted Element is not clickable error clicking a radio button using Selenium and Python

查看:814
本文介绍了ElementClickInterceptedException:消息:元素单击被拦截元素不可单击错误,使用Selenium和Python单击单选按钮的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图点击第一个框(ASN/DSD)

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

但是我收到此错误消息:

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)

我知道我输入了正确的iframe,因为它可以找到元素,而无需单击它. 我的代码是

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()

我看到DebanjanB在这里回答了类似的问题:

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

我正在尝试使用执行脚本来完成他的第三个解决方案.我不知道该模型要使用什么CSS选择器. 模型看起来像这样

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']"))))

我的问题是我需要在第一行中使用哪个CSS选择器,然后它只是我在第二行中使用的初始xpath吗?

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?

这里是HTML供参考.尝试单击输入部分时出现单击拦截错误.如果使用xpath单击label标记,它不会出错但也不会单击它.无需执行任何操作即可直接进入下一部分代码.

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?

推荐答案

此错误消息...

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.

所需的元素是 Angular 元素,因此要对要诱导click()对于element_to_be_clickable(),href ="https://stackoverflow.com/questions/49775502/webdriverwait-not-working-as-expected/49775808#49775808"> WebDriverWait ,您可以使用以下任一定位器策略:

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:

  • 使用CSS_SELECTOR:

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

  • 使用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
    

  • 作为替代方案,您可以按如下方式使用execute_script()方法:

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

    • 使用CSS_SELECTOR:

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

  • 使用XPATH:

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

  • 您可以在以下位置找到一些相关的讨论:

    You can find a couple of relevant discussions in:

    • Element MyElement is not clickable at point (x, y)… Other element would receive the click
    • Selenium Web Driver & Java. Element is not clickable at point (x, y). Other element would receive the click
    • ElementClickInterceptedException: Message: element click intercepted: Element is not clickable with Selenium and Python

    这篇关于ElementClickInterceptedException:消息:元素单击被拦截元素不可单击错误,使用Selenium和Python单击单选按钮的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    相关文章
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆