使用Selenium读取未读邮件时如何判定无匹配邮件并让测试失败
实现方案
你可以通过新增全局标记位的方式解决重复判断的问题,只需要在遍历前定义变量记录是否匹配到目标邮件,遍历完成后统一判断即可,修改后的代码如下:
Message[] messages = folder.getMessages(); String expectedContent = "Thanks for contacting"; // 新增标记位,记录是否找到匹配的邮件 boolean foundTargetMail = false; if(folder.getUnreadMessageCount() != 0) { for (Message mail : messages) { // 只处理未读邮件,减少无效判断 if(!mail.isSet(Flags.Flag.SEEN)) { if(mail.getSubject().contains("Thanks")) { mail.setFlag(Flags.Flag.SEEN, true); softAssert.assertTrue(true,"Email received ->"); Reporter.log("Email received ->" + mail.getSubject(), true); // 匹配到目标邮件,更新标记位 foundTargetMail = true; break; } else { System.out.println(mail.getSubject() + "-> is not the email we are looking for"); } } } // 遍历完所有未读邮件后统一判断 if(!foundTargetMail) { softAssert.assertTrue(false,"All unread emails do not meet the subject requirements"); Reporter.log("Target email not received -> " + expectedContent, true); } } else { softAssert.assertTrue(false,"Email not received"); Reporter.log("Email not received ->" + expectedContent, true); }
本次修改的核心逻辑:
- 新增
foundTargetMail布尔变量:遍历前初始化值为false,只有匹配到符合要求的未读邮件时才会更新为true - 简化未读邮件判断逻辑:将原来两个重复的未读状态判断提取到外层,减少冗余代码
- 遍历结束后统一校验:所有邮件遍历完成后再判断标记位,只要未找到匹配邮件就统一触发一次失败标记,不会出现遍历过程中重复输出的问题
内容的提问来源于stack exchange,提问作者Newtoselenium
相关产品推荐
相关产品推荐

