java - 无法将密钥发送到 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。
解决方案
这是 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您可能还需要添加其他触发事件以更好地模拟用户输入。
推荐阅读
- amazon-cloudformation - Cloudformation - 如何在代码中设置 SNS 订阅的过滤策略?
- maps - “此页面无法正确加载 Google 地图。”
- c - 如何使用 Graphviz 和 libcgraph 获取节点名称?
- swift - AppDelegate 不显示情节提要按钮
- python - 在没有的情况下更改 tkinter 中笔记本选项卡的宽度
- python - 带有while循环的哨兵值
- r - 如何删除R中以下列中右数(0)的第二个数字?200517302 200517801 200519101 200519702 200521002 200521205
- javascript - 不等式不显示正确的输出,JS
- node.js - 电子锻造启动被 Gulp 破坏
- javascript - 如果 variable=string 总是返回 true