selenium.common.exceptions.ElementNotInteractableException:消息:将文本发送到contenteditable div元素时元素不可交互

时间:2019-12-18 08:07:28

标签: python selenium contenteditable sendkeys webdriverwait

我在硒发送密钥不一致时遇到麻烦。我正在尝试向用户发送消息。

我得到的错误是:

selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable

HTML如下: HTML

xpath突出显示的试图send_keys的对象即时消息如下: enter image description here

我的代码如下

inputMessage = wait.until(EC.visibility_of_element_located((By.XPATH,"//div[contains(text(),'Message @')]/..")))

#inputMessage = driver.find_element_by_xpath("//div[contains(text(),'Message @')]/..") 

inputMessage.send_keys(msg,Keys.ENTER) 

我尝试了几种方法来解决该错误,但是没有成功。任何帮助,将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:2)

ElementNotInteractableException错误告诉您不能在此webElement上使用send_keys()方法。考虑到缺乏足够的信息来考虑问题,我真的不能告诉您什么可行,但是这里有一些提示:

  • 使用ActionsChains尝试在字段中输入您想要的内容:
from selenium.webdriver.common.action_chains import ActionChains
actions = ActionChains(self.driver)
actions.send_keys('your_data')
actions.perform()
  • 在尝试发送密钥之前尝试inputMessage.click()

否则,这也发生在我身上,问题是我试图将键发送到div,而不是它内部的元素。

希望有帮助!

答案 1 :(得分:0)

HTML contenteditable属性

通过使用一些JavaScript事件处理程序,只需将几乎所有HTML元素上的contenteditable属性设置为可编辑状态,就可以将您的网页转换为完整,快速的RTF编辑器。例如,要创建一个<div>元素,用户可以编辑其内容,则将是:

<div contenteditable="true">
  This text can be edited by the user.
</div>

当HTML元素的contenteditable设置为true时,document.execCommand()方法可用。这使您可以运行commands来操作可编辑区域的内容。但是,在不同的浏览器中contenteditable的用法似乎有所不同。例如,当您按下 Enter Return 来在可编辑元素内创建新的一行文本时,

  • Firefox插入了<br>个元素
  • IE / Opera使用了<p>个元素
  • Chrome / Safari使用了<div>个元素
  • Firefox 60在<div>元素中包含单独的行,以匹配Chrome,现代Opera,Edge和Safari的行为。

此用例

根据HTML,似乎下一个属性为<div>的{​​{1}}具有属性 aria-label="Message @Ticketing" 。因此,理想情况下,您应该能够在此元素上调用contenteditable="true"


解决方案

最后,要与某个元素进行交互,您需要为send_keys()引入 WebDriverWait ,并且可以使用以下任一Locator Strategies

  • 使用element_to_be_clickable()

    CSS_SELECTOR
  • 使用WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div[aria-label='Message @Ticketing'][data-slate-editor='true'][role='textbox']"))).send_keys(msg)

    XPATH
  • 注意:您必须添加以下导入:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@aria-label='Message @Ticketing' and @data-slate-editor='true'][@role='textbox']"))).send_keys(msg)