首页 > 解决方案 > 无法将密钥发送到 div 元素 Selenium - Java

问题描述

您好我正在尝试使用 xpath 将值填充到文本框(检查下图)。

Actions actions = new Actions(driver);
                                        actions.moveToElement(driver.findElement(By.xpath("//*[@class='CzI8E']")));
                                        actions.click();
                                        Thread.sleep(3000);
                                        actions.moveToElement(driver.findElement(By.xpath("//*[@class='_2S1VP copyable-text selectable-text']")));//_2S1VP copyable-text selectable-text
                                        actions.sendKeys(WhatsappConstants.TEXT_MESSAGE);
                                        actions.build().perform();

但我得到了这个例外

org.openqa.selenium.WebDriverException: unknown error: ChromeDriver only supports characters in the BMP

其他stackoverflow答案说使用firefox驱动程序,但在我的情况下,我需要你只使用chrome。

在此处输入图像描述

标签: javaseleniumselenium-chromedriver

解决方案


这是 Chromedriver 的已知限制,请参阅http://crbug.com/chromedriver/2269以获取官方错误跟踪器中的错误报告。

您可以做的只是将自己限制为受支持的字符,基本上来自: http: //www.columbia.edu/kermit/ucs2.html

或者,您可以模拟输入,而不是使用前端 JS 片段真正发送键,如下所示:

(function (element, text) {
    Array.prototype.forEach.call(text, function (char) {
        element.value += char;
        element.dispatchEvent(new KeyboardEvent("keydown"));
        element.dispatchEvent(new KeyboardEvent("keypress"));
        element.dispatchEvent(new KeyboardEvent("input"));
        element.dispatchEvent(new KeyboardEvent("keyup"));
    });
}).apply(null, arguments);

然后您使用JavascriptExecutor调用它:

((JavascriptExecutor) driver).executeScript(JS_CODE, element, text);

该片段适用于具有可写.value属性的元素,它可以扩展为支持contenteditable元素。

请注意,事件的字段设置为其默认值,包括键代码等,请参阅https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/KeyboardEvent您可能还需要添加其他触发事件以更好地模拟用户输入。


推荐阅读