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

Selenium WebDriver无法设置HTML日期选择器日期求助

解决Selenium设置HTML5 <input type="date">的问题

问题根源

你的日期输入框绑定了onkeydown="return false",这个事件会直接拦截所有键盘输入操作,导致你用sendKeys()输入日期的方法完全失效。另外,点击输入框唤起的浏览器自带日期选择器,也会干扰sendKeys()的作用对象。

解决方案

方法一:直接通过JavaScript设置值(推荐)

HTML5的date类型输入框,其value属性本身就支持YYYY-MM-DD格式,直接通过JS设置该属性可以绕过键盘事件限制,同时手动触发change事件来执行你的验证逻辑:

public void setPatientBOD(String dateOfBirth){
    WebElement dobElement = find(patientBOD);
    // 直接设置输入框的value属性
    ((JavascriptExecutor) webDriver).executeScript("arguments[0].value = arguments[1];", dobElement, dateOfBirth);
    // 手动触发change事件,触发绑定的验证函数
    ((JavascriptExecutor) webDriver).executeScript("arguments[0].dispatchEvent(new Event('change'));", dobElement);
}

方法二:移除键盘拦截后模拟输入

如果坚持要模拟用户键盘输入,可以先移除onkeydown属性解除限制,再执行输入操作:

public void setPatientBOD(String dateOfBirth){
    WebElement dobElement = find(patientBOD);
    // 移除onkeydown属性,允许键盘输入
    ((JavascriptExecutor) webDriver).executeScript("arguments[0].removeAttribute('onkeydown');", dobElement);
    // 正常执行点击、输入操作
    click(patientBOD);
    set(patientBOD, dateOfBirth);
    // 触发change事件完成验证
    ((JavascriptExecutor) webDriver).executeScript("arguments[0].dispatchEvent(new Event('change'));", dobElement);
}

注意事项

  • 必须严格使用YYYY-MM-DD格式的日期,这是HTML5 date输入框的唯一有效格式,其他格式无法被识别。
  • 避免通过点击浏览器自带日期选择器来选择日期,不同浏览器的日期选择器DOM结构差异极大,会导致测试用例兼容性极差。

内容的提问来源于stack exchange,提问作者Haflan Nisthar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 02:31:03