Java配合Selenium如何获取并校验UI显示的日期格式是否符合要求
问题原因
HTML5
datetime-local类型的输入框原生会存储两种值:标准ISO 8601格式的内部值(对应value属性),以及根据浏览器/系统本地化规则渲染的用户可见展示值。你调用element.getAttribute("value")拿到的是内部存储的yyyy-MM-ddTHH:mm格式标准值,自然和UI展示的格式不一致。
解决方案
下面提供两种常用的实现方案,你可以根据场景选择:
- 方案1:直接获取页面实际渲染的展示字符串(适合需要严格匹配用户可见内容的场景)
通过Selenium执行JS读取输入框的本地化展示值,示例代码如下:
JavascriptExecutor jsExecutor = (JavascriptExecutor) driver; // 参数hour12: false表示使用24小时制,和你要校验的HH规则匹配 String uiDisplayedDate = (String) jsExecutor.executeScript( "return arguments[0].valueAsDate.toLocaleString('en-US', {" + "year: 'numeric', month: '2-digit', day: '2-digit', " + "hour: '2-digit', minute: '2-digit', hour12: false" + "})", element); // 直接校验uiDisplayedDate是否符合MM/dd/yyyy HH:mm格式即可
- 方案2:转换内部标准值为目标格式(性能更高,无需执行JS)
你已经熟悉LocalDateTime格式化的用法,可以先将拿到的ISO标准值解析后转为目标格式再校验,示例代码如下:
// 拿到内部标准ISO格式值 String isoDateTime = element.getAttribute("value"); // 用ISO标准格式解析为LocalDateTime LocalDateTime dateTime = LocalDateTime.parse(isoDateTime, DateTimeFormatter.ISO_LOCAL_DATE_TIME); // 格式化为你需要校验的MM/dd/yyyy HH:mm格式 String targetFormatDate = dateTime.format(DateTimeFormatter.ofPattern("MM/dd/yyyy HH:mm")); // 校验targetFormatDate是否符合规范即可
内容的提问来源于stack exchange,提问作者Shadi Ahmed
相关产品推荐
相关产品推荐

