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格式的日期,这是HTML5date输入框的唯一有效格式,其他格式无法被识别。 - 避免通过点击浏览器自带日期选择器来选择日期,不同浏览器的日期选择器DOM结构差异极大,会导致测试用例兼容性极差。
内容的提问来源于stack exchange,提问作者Haflan Nisthar
相关产品推荐
相关产品推荐

