Python element ClickInterceptedException:消息:element ClickIntercepted使用Selenium WebDriver

Python element ClickInterceptedException:消息:element ClickIntercepted使用Selenium WebDriver,python,selenium-webdriver,xpath,css-selectors,webdriverwait,Python,Selenium Webdriver,Xpath,Css Selectors,Webdriverwait,我试图在运行自动测试时单击某个字段,但出现以下错误: raise exception_class(message, screen, stacktrace) selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element <input id="artistNominee010" type="checkbox"

我试图在运行自动测试时单击某个字段,但出现以下错误:

raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element <input id="artistNominee010" type="checkbox" class="rock-artist-checkbox"> is not clickable at point (967, 601). Other element would receive the click: <span class="rock-artist-toggle-icon"></span>
这是页面的DOM结构:


无名氏
选择无名氏
从网站上看,这是一个可以点击的元素,但我不能直接选择它,因为其他元素包含相同的类名和不同的被提名者,id是唯一的

选择John Doe
是否还有其他方法可以这样做:

select_-namegate=WebDriverWait(driver,2)。直到(EC.presence_-of_-element位于((By.ID,'artistnamegate010')。类('rock-accessible-text')。单击()

等待元素可单击,而不是显示

select_nominee = WebDriverWait(driver, 2).until(EC.element_to_be_clickable((By.ID, 'artistNominee010'))).click()

因为元素可以出现在DOM中,但还不能单击(如果被另一个元素阻挡,这可能是您的情况)。

要单击该元素而不是您需要对进行归纳,您可以使用以下任一方法:

  • 使用
    CSS\u选择器

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "label[for='artistNominee010']"))).click()
    
  • 使用
    XPATH

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//label[@for='artistNominee010']"))).click()
    
  • 注意:您必须添加以下导入:

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

因此,我能够以一种非常简单的方式解决这个问题,如下所示:

来自selenium.webdriver.common导入密钥的

选择被提名者=WebDriverWait(驱动者,10)。直到(存在被定位的元素((By.ID,'ArtistNamed010'))为止。发送密钥(key.key.SPACE)
参考访问

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