OpenQA.Selenium.WebDriverException:'未知错误:ChromeDriver仅在通过C#Selenium发送表情符号时支持BMP中的字符

时间:2018-05-20 20:45:27

标签: c# selenium google-chrome selenium-chromedriver basic-multilingual-plane

我正在尝试发送一个表情符号。我试图通过应对信号发送它,但它引发了这个例外。

OpenQA.Selenium.WebDriverException: 'unknown error: ChromeDriver only supports characters in the BMP

我尝试将其作为unicode发送,但没有任何成功。它是一个令人沮丧的标志。

input.SendKeys("/u1F44D")

发送表情符号的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

此错误消息...

OpenQA.Selenium.WebDriverException: 'unknown error: ChromeDriver only supports characters in the BMP

...表示 ChromeDriver 无法发送表情符号,即?通过SendKeys()方法发出信号。

从@JimEvans answer中提取叶子,目前ChromeDriver仅支持 Plane 0 (即目前的Basic Multilingual Plane (BMP))中的代码点。

使用 GeckoDriver / Firefox IEDriverServer / IE 组合可以为您带来更好的结果。

您可以在Web Platform Test Suite中找到专门发送表情符号的特定测试的当前状态,这些测试也适用于其他浏览器。

但是,要通过C#发送表情符号,您可以使用以下语法:

input.SendKeys("\u1F44D");

答案 1 :(得分:0)

解决方案

    async sendKeysWithEmojis(element, text) {
        const script = `var elm = arguments[0],
        txt = arguments[1];elm.value += txt;
        elm.dispatchEvent(new Event('keydown', {bubbles: true}));
        elm.dispatchEvent(new Event('keypress', {bubbles: true}));
        elm.dispatchEvent(new Event('input', {bubbles: true}));
        elm.dispatchEvent(new Event('keyup', {bubbles: true}));`;
        await this.driver.executeScript(script, element, text);
    }

这样称呼

const element = await this.driver.findElement(selector);
await sendKeysWithEmojis(element, '?? This one shall pass ??');

这是怎么回事? 我们正在使用事件模拟本地按键

请注意,{bubbles: true}是可选的(由于复杂的包装输入,我需要这样做)