我在硒发送键不一致时遇到麻烦。我正在尝试向用户发送消息。
我得到的错误是:
selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
xpath突出显示的试图send_keys
的对象即时消息如下:
我的代码如下
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)
我已经尝试了几种方法来解决该错误,但是没有成功。任何帮助,将不胜感激。谢谢。
ElementNotInteractableException
错误告诉您不能在此webElement上使用send_keys()方法。考虑到缺乏足够的信息来考虑问题,我真的不能告诉你什么可行,但是这里有一些线索:
from selenium.webdriver.common.action_chains import ActionChains
actions = ActionChains(self.driver)
actions.send_keys('your_data')
actions.perform()
inputMessage.click()
否则,它也发生在我身上,问题是我试图将键发送到div,而不是它内部的元素。
希望有帮助!
[通过使用某些JavaScript事件处理程序,您只需将几乎任何HTML元素上的contenteditable
属性设置为可编辑状态,就可以将您的网页转换为完整且快速的RTF编辑器。例如,创建一个contenteditable
元素,用户可以编辑其内容为:
<div>
当HTML元素的<div contenteditable="true">
This text can be edited by the user.
</div>
设置为contenteditable
时,true
方法可用。这使您可以运行document.execCommand()
来操作可编辑区域的内容。但是,在不同的浏览器中,document.execCommand()
的用法似乎有所不同。例如,当您按下Enter或Return在可编辑元素内创建新行文本时:
contenteditable
元素<br>
元素<p>
元素中包含单独的行,以匹配Chrome,现代Opera,Edge和Safari的行为。根据HTML,似乎下一个具有属性<div>
的<div>
具有属性<div>
。因此,理想情况下,您应该能够在此元素上调用aria-label="Message @Ticketing"
。
最后,要与元素交互,需要为contenteditable="true"
引入WebDriverWait,并且可以使用以下任何一个send_keys()
:
使用element_to_be_clickable()
:
Locator Strategies
使用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