Robot Framework向Monaco Editor的Div编辑器输入文本时触发InvalidElementStateException问题求助
Robot Framework向Monaco Editor的Div编辑器输入文本时触发InvalidElementStateException问题求助
我之前也踩过这个坑!Monaco Editor(就是VS Code同款的网页编辑器)的外层div只是用来渲染文本的展示区域,它根本不是标准的可输入表单元素(比如input、textarea),直接用Robot Framework的Input Text关键字肯定会报错——因为这个div本身不支持接收文本输入的操作,自然就抛出InvalidElementStateException了。
给你两个亲测有效的解决方法:
方法一:用Monaco原生API通过JavaScript设置值
Monaco自带了直接操作编辑器实例的API,我们可以通过Execute JavaScript关键字调用它来设置文本,这是最稳定的方式:
# 方式1:获取页面第一个编辑器实例并设置内容 Execute JavaScript monaco.editor.getEditors()[0].setValue('${query}') # 方式2:如果页面有多个编辑器,通过容器元素精准定位(更推荐) ${editor_container}= Get WebElement //div[@class='view-lines monaco-mouse-cursor-text']/.. Execute JavaScript monaco.editor.getEditor(${editor_container}).setValue('${query}')
方法二:定位Monaco隐藏的textarea输入框
Monaco底层会藏着一个textarea用来接收键盘输入,我们可以定位到它再进行输入操作:
# 定位隐藏的textarea(选择器可能需要根据你的页面微调) ${textarea}= Get WebElement //textarea[contains(@class, 'monaco-editor-input')] # 先聚焦元素(避免输入无响应) Focus Element ${textarea} # 输入目标文本 Input Text ${textarea} ${query}
额外注意点
- 一定要等Monaco编辑器完全初始化再执行操作,可以加
Wait Until Element Is Visible等待外层div加载完成; - 如果页面有多个编辑器,
getEditors()[0]的索引要对应你要操作的那个,用容器定位的方式会更精准。
备注:内容来源于stack exchange,提问作者soumya
相关产品推荐
相关产品推荐

