在Safari中可编辑的内容上按Enter键

在Safari中可编辑的内容上按Enter键,safari,automated-tests,chatbot,e2e-testing,testcafe,Safari,Automated Tests,Chatbot,E2e Testing,Testcafe,我正在尝试使用TestCafe测试一个聊天机器人,它使用contenteditablediv作为用户输入。实际上,Chrome和Firefox已经成功地按了enter,并通过了测试,但却无法让Safari按enter。我知道contenteditable不支持pressKey(“enter”),但我想知道为什么它既适用于Chrome,又适用于Firefox,而不适用于Safari,我是否可以让它适用于Safari test("Able to send a message on enter key

我正在尝试使用TestCafe测试一个聊天机器人,它使用
contenteditable
div作为用户输入。实际上,Chrome和Firefox已经成功地按了
enter
,并通过了测试,但却无法让Safari按
enter
。我知道
contenteditable
不支持
pressKey(“enter”)
,但我想知道为什么它既适用于Chrome,又适用于Firefox,而不适用于Safari,我是否可以让它适用于Safari

test("Able to send a message on enter keypress", async t => {
  await t
    .typeText(chatbot.userReply, "hi")
    .pressKey("enter")
    .expect(chatbot.transcriptMessages.find("li").withText("hi").count).eql(1)
})

如果不研究一个显示问题的工作示例,很难说为什么这在Safari中不起作用。据我从您的描述中了解,contenteditable元素具有
keypress
事件处理程序,它在
enter
press上发送消息。我准备了一个示例项目来演示这种方法,Safari和Chrome都能正常运行:

测试页面:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
</head>
<body>
<div id="editor" contenteditable="true" style="width: 300px; height: 300px; border: 1px solid black;">test</div>
<script>
    document.getElementById('editor').addEventListener('keypress', function() { alert('test') })
</script>
</body>
</html>

在本页的评论中,您提到这是在iframe中,因此您需要执行以下操作:

await t.switchToIframe(iframeSelector);
切换回时,您可以执行以下操作:

await t.switchToMainWindow();

谢谢你的回复。是的,我有一个事件处理程序正在监听
keydown
中的
enter
按键。我忘了提到这一切都在一个iframe中,这可能是原因之一吗?我不确定,但是如果您有一个示例项目来演示这个问题,您可以在github上创建一个票证
await t.switchToMainWindow();