我正在使用mail-listener2监控电子邮件帐户,检查电子邮件是否已作为测试的一部分收到。
我使用了此处定义的相同实现:此处:Fetching values from email in protractor test case
但是,getLastEmail()会返回旧电子邮件,而不是在mail-listener2启动后收到的电子邮件。它返回第一封UNSEEN电子邮件。
我看过是否可以使用不同的mail-listener2配置来解决这个问题,但我还没有找到任何东西。我还尝试在返回的邮件上使用.last(),但这也没有用。
有没有人有配置解决方案,或者有助于解决此问题的自定义解决方案?
答案 0 :(得分:3)
我认为这可能会对你有所帮助,我使用你所遵循的同一篇文章实现了mail-listener2,这对我来说非常有用。我刚刚添加了一些额外的参数:
在我的配置import java.io.Serializable;
public class Pair<F extends Serializable, S extends Serializable> implements Serializable {
private static final long serialVersionUID = 1L;
private F first;
private S second;
public Pair(F first, S second) {
this.first = first;
this.second = second;
}
public F getFirst() { return first; }
public S getSecond() { return second; }
public String toString() {
return "First: " + this.first.toString() + " Second: " + this.second.toString();
}
}
下,我创建了一个日期:
onPrepare
然后在我的var emailDate = new Date().getTime();
初始化下:
mailListener
这应该将mailListener配置为仅查找在您的测试开始时创建的 var mailListener = new MailListener({
username: ...
password: ...
...
searchFilter: ["NEW", "UNSEEN", ["SINCE", emailDate]]
});
时间之后发送的电子邮件。您还可以指定确切的日期,即emailDate
有关node-imap文档(mailListener2使用的)
的更多信息答案 1 :(得分:0)
我在mailListener配置的conf文件中具有以下配置:
GET
https://graph.facebook.com/v8.0/' + mid + '?fields=message%2Cfrom%2Csticker%2Ctags%2Cid%2Cattachments.limit(10)%7Bid%2Cimage_data%2Cmime_type%2Cname%2Cfile_url%2Cvideo_data%7D&access_token=XXXXXX
每次阅读电子邮件时,该电子邮件都被标记为已读,下次将不会提取。这意味着您将始终阅读新电子邮件。
答案 2 :(得分:0)
在我的情况下,由于服务器时间与 gmail 服务器时间的差异,先前的答案还不够。所以一个完整的方法可能是:
var currentDate = new Date().toUTCString()
var mailListener = new MailListener({
...
markSeen: true,
port: 993,
tls: true,
searchFilter: ["UNSEEN", ["SINCE", currentDate]]
});
那么您的 getLastEmail 助手可能是:
getLastEmail = function () {
var deferred = protractor.promise.defer();
console.log("Waiting for an email...");
const hrs = new Date().getUTCHours()
const minutes = new Date().getUTCMinutes()
mailListener.on("mail", function(mail){
if( hrs=== new Date().getUTCHours("mail.headers.date") &&
minutes- new Date().getUTCMinutes("mail.headers.date") <=1 ) {
deferred.fulfill(mail);
}
});
return deferred.promise;
}
这对我有用。