由于ElementNotInteractableException,因此无法单击带有硒的切换

时间:2020-10-27 16:27:43

标签: python selenium testing automation

我正在尝试使用Selenium Webdriver和Python单击切换开关,但出现以下异常:

 selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
                           (Session info: chrome=86.0.4240.111)

我的HTML代码

<div _ngcontent-c7="" class="form-group">
  <label _ngcontent-c7="" for="opened">Opened</label>
 <div _ngcontent-c7="" class="toggle-switch">
    <input _ngcontent-c7="" id="opened" name="opened" type="checkbox" class="ng-untouched ng-pristine ng-valid">
  <label _ngcontent-c7="" for="opened"></label>
 </div>
 <span _ngcontent-c7="" class="form-control-helper">Toggle text description.</span>
</div>

我使用以下选择器,它是100%唯一的:

.toggle-switch>label[for=opened]

可能是什么问题?这是“角度”模态对话框。 我尝试了许多独特的定位器,包括XPATH和CSS,我确信这不是定位器问题。 有人有类似的问题吗?

我的Python代码:

    toggle = driver.find_element_by_css_selector(".toggle-switch>label[for=opened]")
    toggle.click()

谢谢。

3 个答案:

答案 0 :(得分:1)

我现在使用的最好的防弹选项是:

toggle = driver.find_element_by_css_selector(".toggle-switch>label[for=opened]")
driver.execute_script("arguments[0].click();", toggle)

此外,有时我需要等到覆盖我的切换的元素变得不可见时:

 wait.until(EC.invisibility_of_element_located((By.CSS_SELECTOR, "my css selector")))

答案 1 :(得分:0)

您正在尝试与标签进行互动。您需要输入元素:

 #remove the label from page
 driver.execute_script("document.querySelector(\"strong[for='opened']\").style.visibility = 'hidden';")

 toggle = driver.find_element_by_css_selector("#opened")
 toggle.click()

答案 2 :(得分:-1)

为什么不尝试使用pyautogui来代替它,而是将鼠标移到toogle所在的特定坐标上并以此模拟点击?