You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WebDriver问题:sendKeys()丢失焦点/输入顺序异常,迁移服务器后出现

问题分析与解决方案

核心问题大概率出在Chrome版本从58升级到65带来的兼容性变化——虽然Selenium版本一致,但ChromeDriver与浏览器的版本匹配、新版Chrome对富文本输入的处理逻辑都可能触发这个异常。下面是具体的排查和解决步骤:

1. 优先检查ChromeDriver与Chrome版本的兼容性

Chrome和ChromeDriver的版本必须严格匹配,这是Selenium自动化里最容易踩的坑之一:

  • Chrome 65对应的ChromeDriver版本是2.37(它支持Chrome 64-66版本),而旧服务器上Chrome 58对应的是ChromeDriver 2.30左右。如果新服务器的ChromeDriver还是旧版本,必然会出现各种输入异常。
  • 解决办法:
    1. 卸载现有ChromeDriver:sudo apt remove chromedriver
    2. 下载适配Ubuntu 16.04的ChromeDriver 2.37版本
    3. 赋予执行权限:chmod +x chromedriver
    4. 替换系统旧版本:sudo mv chromedriver /usr/local/bin/

2. 调整含HTML标签文本的输入方式

Chrome 65对富文本编辑器的输入处理逻辑有更新,直接用sendKeys()输入HTML标签可能被转义或无法正确解析,可以改用JavaScript注入的方式设置内容:

情况1:描述字段是带contenteditable属性的普通文本框

// 定位描述字段元素
WebElement descField = driver.findElement(By.id("your-description-element-id"));
// 准备带HTML标签的内容
String htmlContent = "<h3>测试标题</h3><p>包含<strong>加粗</strong>的段落文本</p>";
// 通过JS直接设置元素的innerHTML
((JavascriptExecutor) driver).executeScript("arguments[0].innerHTML = arguments[1];", descField, htmlContent);

情况2:描述字段是嵌入iframe的富文本编辑器(如CKEditor、TinyMCE)

多数富文本编辑器会放在iframe中,需要先切换到iframe再操作:

// 切换到编辑器对应的iframe(替换为实际的iframe定位器)
driver.switchTo().frame("editor-iframe-id");
// 定位编辑器的body元素
WebElement editorBody = driver.findElement(By.tagName("body"));
// 注入HTML内容
((JavascriptExecutor) driver).executeScript("arguments[0].innerHTML = arguments[1];", editorBody, htmlContent);
// 切回主文档
driver.switchTo().defaultContent();

3. 验证Selenium版本的兼容性

虽然你提到两台服务器Selenium版本一致,但还是要确认当前版本是否支持Chrome 65。一般来说,Selenium 3.8.0及以上版本对Chrome 65的支持更完善,如果你的版本过低,建议升级到3.x的稳定版(比如3.141.59),避免潜在的API兼容问题。


内容的提问来源于stack exchange,提问作者Simon Bolivar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:26:16