非文本字段元素调用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
相关产品推荐
相关产品推荐

