如何用Selenium Java校验表格上传时间是否含指定HH:MM:SS字符串
Selenium Java校验表格上传时间包含预存时间值实现方案
前置避坑提示
- 时间捕获时机不要太早,必须放在点击上传提交按钮的前1行代码执行,提前太久捕获会因为操作延迟、接口响应耗时导致你存的时间和服务器记录的上传时间差1秒以上,出现误判
- 提前确认脚本运行环境的时区和web应用服务器时区一致,时区差会导致小时数完全对不上
- 时间格式化注意区分格式符:
HH是24小时制小时、mm是分钟、ss是秒,不要和代表月份的MM搞混
具体实现步骤
- 正确生成预存的时间字符串
StringABC,用Java 8+自带的时间API格式化,避免手写格式出错:
import java.time.LocalTime; import java.time.format.DateTimeFormatter; // 初始化HH:mm:ss格式的格式化器 DateTimeFormatter hmsFormatter = DateTimeFormatter.ofPattern("HH:mm:ss"); // 点击上传按钮前再执行这行捕获当前时间 String StringABC = LocalTime.now().format(hmsFormatter);
- 页面跳转至表格页后,精准定位到你刚上传的那条记录对应的时间单元格,不要拿错其他行的数据:
import org.openqa.selenium.By; import org.openqa.selenium.WebElement; // 以刚上传的文件名为锚点定位对应数据行,替换成你实际上传的文件名即可 WebElement uploadRecordRow = driver.findElement(By.xpath("//tr[contains(.,'你上传的文件名')]")); // 替换成你实际项目中时间列的定位方式,比如class名、列索引 WebElement timeCell = uploadRecordRow.findElement(By.xpath("./td[last()]")); // 拿到单元格文本后做基础处理,去掉前后多余空格 String pageTimeContent = timeCell.getText().trim();
- 做容错处理后执行包含校验,避免全角半角符号、多余空格导致的校验失败:
import org.testng.Assert; // 用JUnit的话换成对应Assert类即可 // 统一替换全角冒号为半角,移除所有空白字符消除格式差异 String formatPageTime = pageTimeContent.replace(":", ":").replaceAll("\\s", ""); String formatExpectTime = StringABC.replace(":", ":").replaceAll("\\s", ""); // 执行包含判断+断言 boolean timeMatched = formatPageTime.contains(formatExpectTime); Assert.assertTrue(timeMatched, String.format("上传时间校验不通过,预期包含时间:%s,页面实际展示时间:%s", StringABC, pageTimeContent));
常见失败排查
- 若断言失败先打印
pageTimeContent看实际拿到的文本,大概率是定位逻辑写错,拿到了非时间列的内容 - 若固定差1秒匹配不上,把捕获
StringABC的代码移到点击上传操作的紧前面,不要在进入上传页面时就提前捕获时间 - 若时间差超过1分钟甚至小时级不对,先对齐本地运行环境和服务器的时区,再做时间格式化
内容的提问来源于stack exchange,提问作者Anandhu
相关产品推荐
相关产品推荐

