You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Web自动化测试:可点击文本框但SendKeys报Element Not Interactable错误

解决SendKeys()抛出Element Not Interactable错误的方案

我之前也碰到过类似的问题,结合你的代码和HTML结构来看,问题大概率出在你定位的元素根本不是可输入的目标元素上——你现在定位的是<td>标签,但<td>本身是表格单元格,不是可输入的表单控件,就算能点击,也没法直接用SendKeys()输入内容。

问题分析

从你给出的HTML结构来看,点击<td>后应该是触发了前端的交互逻辑(比如弹出/显示真正的输入框,可能是动态生成的<input>或者让<span>变成可编辑状态),但你还是在给<td>发SendKeys()指令,自然会报“元素不可交互”的错误。

可行的解决方案

  • 定位真正的可输入元素
    打开浏览器开发者工具(F12),点击那个文本框后查看DOM结构的变化——大概率会出现一个<input>标签,或者原来的<span>会被加上contenteditable="true"之类的属性。你需要把定位器改成指向这个真正能接收输入的元素,比如:

    // 假设动态生成的input的XPath是这样的,实际要根据真实DOM调整
    IWebElement realInput = driver.FindElement(By.XPath("//td[@id='mainForm:OT_j_id788']//input"));
    realInput.SendKeys("Test001");
    
  • 使用显式等待替代Thread.Sleep
    硬编码的Thread.Sleep()不稳定,建议用Selenium的显式等待,确保元素真正可交互后再操作:

    WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
    IWebElement realInput = wait.Until(ExpectedConditions.ElementToBeClickable(By.XPath("你的目标元素XPath")));
    realInput.Click();
    realInput.SendKeys("Test001");
    
  • 用JavaScript Executor直接设置元素值
    如果确实是<span>变成可编辑状态,或者找不到输入框,可以用JS直接修改元素的内容:

    IJavaScriptExecutor jse = (IJavaScriptExecutor)driver;
    // 假设目标是span元素
    IWebElement editableSpan = driver.FindElement(By.XPath("//span[@id='mainForm:OT_j_id789C']"));
    jse.ExecuteScript("arguments[0].textContent = 'Test001';", editableSpan);
    // 如果是contenteditable的元素,也可以用:
    // jse.ExecuteScript("arguments[0].innerText = 'Test001';", editableSpan);
    

另外,你之前尝试的JS点击其实没解决问题,因为问题根源不是点击不了,而是找错了输入的目标元素。先确认真正的输入控件,再调整定位器,应该就能解决这个问题了。

内容的提问来源于stack exchange,提问作者Akansha Nema

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:10:56