如何解决使用 Java Selenium 进行测试自动化 - 使用 JavaMail 检查确认电子邮件 - 如果电子邮件迟到几秒钟,则不会收到邮件
所以,我刚刚在现有的自动化框架中编写了我的第一个测试,用于用户注册过程。
该代码的作用是在前端注册一个用户,然后使用 javaMail 在后台检查具有特定主题的电子邮件,而不是通过 UI。
7/10 次它工作正常,但我注意到,在一天的前几次运行中它失败了,因为电子邮件迟到了几秒钟。如果没有找到消息等,我对我的代码进行了各种修改以进行循环,但似乎没有任何效果。
我在测试中得到的确切错误是“索引 0 超出长度 0 的范围”,这基本上意味着没有填充 arrayList,所以是的,问题是,为什么它没有填充..
这是我的 getMessageBySubject() 方法,有什么明显我做错的地方吗? -
public Message[] getMessagesBySubject(String subject,boolean unreadOnly,boolean nonZero,int maxToSearch) throws MessagingException {
Map<String,Integer> indices = getStartAndEndindices(maxToSearch);
Message messages[];
long startTime = System.currentTimeMillis();
do {
messages = folder.search(
new SubjectTerm(subject),folder.getMessages(indices.get("startIndex"),indices.get("endindex")));
if (unreadOnly) {
List<Message> unreadMessages = new ArrayList<Message>();
for (Message message : messages) {
if (isMessageUnread(message)) {
unreadMessages.add(message);
}
}
messages = unreadMessages.toArray(new Message[]{});
}
} while (messages.length == 0 && nonZero && System.currentTimeMillis() - startTime < 20000);
return messages;
}
这是实际测试类中的调用-
public void checkEmailConfirmation() throws MessagingException,IOException {
Message email = Arrays.asList(emailUtils.getMessagesBySubject("Account confirmation for " + registrationTitle + " " + registrationFirstname + " " + registrationLastname,true,5)).get(0);
String link = emailUtils.getUrlsFromMessage(email,"confirm").get(0);
assertthat("Confirmation link not populated",link != null && !link.trim().isEmpty());
basePage.goToURL(link);
assertthat("Not logged in successfully!",myAccountPage.loginSuccessful());
我们的项目使用 gradle,这些是我们正在使用的 javaMail 包 -
compile 'javax.mail:javax.mail-api:1.6.2'
compile 'com.sun.mail:javax.mail:1.6.2'
compile 'com.sun.mail:smtp:2.0.0'
任何帮助将不胜感激..我花了太长时间在这个测试中拉我的头发:'(
解决方法
解决了这个问题,现在每次都可以使用,结果我们需要打开和关闭文件夹,所以在这里创建了一个方法 -
public void refreshFolder() throws MessagingException {
folder.close();
folder.open(Folder.READ_WRITE);
}
getMessagesBySubjectMethod 现在看起来像 -
public Message[] getMessagesBySubject(String subject,boolean unreadOnly,boolean nonZero,int maxToSearch) throws MessagingException {
Map<String,Integer> indices = getStartAndEndIndices(maxToSearch);
Message messages[];
long startTime = System.currentTimeMillis();
do {
refreshFolder();
messages = folder.search(
new SubjectTerm(subject),folder.getMessages(indices.get("startIndex"),indices.get("endIndex")));
if (unreadOnly) {
List<Message> unreadMessages = new ArrayList<Message>();
for (Message message : messages) {
if (isMessageUnread(message)) {
unreadMessages.add(message);
}
}
messages = unreadMessages.toArray(new Message[]{});
}
} while (messages.length == 0 && nonZero && System.currentTimeMillis() - startTime < 20000);
return messages;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。