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
相关产品推荐
相关产品推荐

