Cucumber-Selenium-Java如何实现长等待文件上传场景的自动化逻辑
长周期异步工作流场景自动化实现方案(Cucumber-Selenium-Java)
1. 前置任务批量预处理
- 优先跑完30份业务申请的全量创建流程,将所有申请的唯一编号存入
List<String> applyNoList集合统一管理,无需等待单份申请工作流完成再创建下一份,压缩前置操作耗时 - 因系统要求申请必须按顺序解锁上传权限,后续轮询直接按申请创建顺序校验即可,无需做乱序适配
2. 自定义智能轮询等待逻辑
替换固定时长等待,使用Selenium原生FluentWait实现带间隔的轮询校验,既避免频繁请求压测服务,也能在按钮可用后第一时间触发后续操作:
- 最大等待时长设为6分钟(覆盖最长5分钟的工作流处理时长,预留1分钟冗余)
- 轮询间隔设为30秒,每次校验前刷新页面拉取最新的申请状态
- 参考实现代码:
/** * 等待指定申请的文件上传按钮变为可点击状态 * @param applyNo 申请唯一编号 * @param driver WebDriver实例 */ public void waitForUploadButtonReady(String applyNo, WebDriver driver) { // 按唯一编号搜索打开对应申请页面 openApplyPageByNo(applyNo); new FluentWait<>(driver) .withTimeout(Duration.ofMinutes(6)) .pollingEvery(Duration.ofSeconds(30)) .ignoring(NoSuchElementException.class, ElementNotInteractableException.class) .until(d -> { // 刷新页面获取最新工作流状态 d.navigate().refresh(); WebElement uploadBtn = d.findElement(By.id("file-upload-btn")); return uploadBtn.isEnabled(); }); }
3. 执行流程效率优化
- 单份申请等待解锁的间隙,可插入执行不依赖申请状态的无关测试步骤,最大化利用等待空窗期
- 某份申请的上传按钮解锁后,立即执行文件上传操作,完成后直接开始轮询下一份申请的状态,无额外等待
4. Cucumber用例层适配
- 将核心逻辑拆分为独立可复用Step,降低代码冗余:
Given 批量创建{int}份业务申请When 等待第{int}份申请的上传权限解锁Then 为第{int}份申请上传测试文件
- 使用
Scenario Outline批量执行30份申请的上传流程,无需单独编写30份重复用例
5. 异常兜底处理
- 单份申请等待超时时直接抛出流程异常,标记该申请异常后继续执行后续任务,避免阻塞整个测试套
- 记录每次轮询的时间、申请编号、按钮状态,方便后续排查工作流卡顿或超时问题
内容的提问来源于stack exchange,提问作者mmar
相关产品推荐
相关产品推荐

