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

非文本字段元素调用sendKeys(Keys.ENTER)提示元素不可交互如何解决

问题原因
  • 只有原生可交互元素(输入框、按钮等)或显式设置了可聚焦属性的元素,才支持直接调用sendKeys方法传递键盘事件,自定义列表项默认不具备可聚焦属性,因此触发element is not interactable报错
  • 此前调用JS执行报错大概率是调用逻辑不对,没有正确触发键盘事件而非元素本身不支持操作
解决方案

方案1:使用Actions类模拟完整交互流程

Actions类可以绕过原生元素交互限制,先将光标移动到元素上激活状态,再发送回车事件:

// 导入依赖
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.Keys;

// 操作逻辑
Actions actions = new Actions(driver);
WebElement targetItem = driver.findElement(By.xpath("xpath_name"));
actions.moveToElement(targetItem)
       .click() // 先点击激活元素焦点,若点击会触发额外逻辑可替换为无副作用的聚焦操作
       .sendKeys(Keys.ENTER)
       .build()
       .perform();

方案2:给元素新增可聚焦属性后操作

通过JS给目标元素添加tabindex属性,让元素支持键盘聚焦后再发送回车:

WebElement targetItem = driver.findElement(By.xpath("xpath_name"));
// 给元素添加可聚焦属性
js.executeScript("arguments[0].setAttribute('tabindex', '0')", targetItem);
// 聚焦后发送回车
targetItem.sendKeys(Keys.ENTER);
// 操作完成后可选择移除属性避免影响页面原有逻辑
js.executeScript("arguments[0].removeAttribute('tabindex')", targetItem);

方案3:直接通过JS触发回车键盘事件

直接模拟浏览器的回车键盘事件触发,完全绕过元素可交互校验:

WebElement targetItem = driver.findElement(By.xpath("xpath_name"));
// 执行JS触发keydown+keyup完整回车事件
js.executeScript("""
    const enterEvent = new KeyboardEvent('keydown', {key: 'Enter', code: 'Enter', which: 13, bubbles: true});
    arguments[0].dispatchEvent(enterEvent);
    const keyupEvent = new KeyboardEvent('keyup', {key: 'Enter', code: 'Enter', which: 13, bubbles: true});
    arguments[0].dispatchEvent(keyupEvent);
""", targetItem);

注:如果页面监听的是keypress事件,在上述代码中补充对应的keypress事件触发即可。

内容的提问来源于stack exchange,提问作者A.K Hussain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:09:00