如何使用C# Selenium向非Input可编辑P元素执行SendKeys操作?
解决向非Input的Contenteditable字段输入文本的问题
针对你遇到的WordPress块编辑器中可编辑段落(contenteditable="true"的<p>标签)无法用SendKeys输入文本的问题,提供以下两种可靠解决方案:
一、优化定位+聚焦后输入
绝对XPath极易因页面结构变化失效,先改用稳定的属性定位元素,再确保元素聚焦并清空原有内容后输入:
string text = "<!-- wp:table -->\n<figure class=\"wp-block-table\">"; // 使用contenteditable属性+aria-label定位,避免依赖动态ID var editablePara = drv.FindElement(By.XPath("//p[@contenteditable='true' and @aria-label='Absatz-Block']")); // 点击聚焦元素,全选并删除原有内容 editablePara.Click(); editablePara.SendKeys(Keys.Control + "a"); editablePara.SendKeys(Keys.Delete); // 输入目标文本 editablePara.SendKeys(text);
二、用JavaScript直接注入内容(更可靠)
部分富文本编辑器对SendKeys支持不佳,可通过IJavaScriptExecutor直接修改元素内容,绕过编辑器的输入拦截:
string text = "<!-- wp:table -->\n<figure class=\"wp-block-table\">"; var editablePara = drv.FindElement(By.XPath("//p[@contenteditable='true' and @aria-label='Absatz-Block']")); // 转换为JS执行器,设置元素innerHTML(保留HTML格式) IJavaScriptExecutor js = (IJavaScriptExecutor)drv; js.ExecuteScript("arguments[0].innerHTML = arguments[1];", editablePara, text); // 若只需纯文本,改用textContent: // js.ExecuteScript("arguments[0].textContent = arguments[1];", editablePara, text);
原代码失败的可能原因
- 绝对XPath过于脆弱,页面结构稍有变动就会定位失败;
- 元素未聚焦,
SendKeys的输入未被编辑器捕获; - 原有内容未清空,输入的文本被追加到不可见区域。
内容的提问来源于stack exchange,提问作者Loki wind.
相关产品推荐
相关产品推荐

