在测试中,我想访问通过电子邮件发送的URL。我可以将URL成功保存到变量中,但是无法使cypress转到该URL。我不断收到以下错误。我不完全了解柏树是“类似承诺的”,所以我不确定如何解决该问题
未捕获(承诺)的CypressError:Cypress检测到您返回了 来自命令的承诺,同时还调用一个或多个cy命令 在那个诺言中。
返回承诺的命令是:
cy.get()
您在promise中调用的cy命令是:
cy.request()
因为赛普拉斯命令已经像承诺一样,所以您不需要 包装它们或返回自己的诺言。
Cypress将使用最终的Cypress来解决您的命令 命令产量。
Cypress.Commands.add("clickForgotPwdLink", (emailaddress) => {
const MailosaurClient = require('mailosaur');
const client = new MailosaurClient('1234');
let latestEmail;
var emailLower = emailaddress.toLowerCase();
client.messages.search('abc', {
sentTo: emailLower
}).then((results) => {
latestEmail = results.items[0];
let email = latestEmail.id;
client.messages.get(email)
.then((newlink) => {
var forgotpwd = newlink.html.links[0].href;
console.log(forgotpwd)
cy.request(''+forgotpwd+'');
})
})
});
答案 0 :(得分:0)
这与从cy.request中删除所有引号和加号一样简单吗?这就是我们使用存储的URL的方式,并且有效。但是存储的网址不是来自电子邮件,而是来自页面上的元素
答案 1 :(得分:0)
我也像您一样尝试过,但赛普拉斯不允许。 您必须通过cy.request()对Mailosaur API进行操作。
尝试这样的事情:
cy.request({
method: 'POST',
url: 'https://mailosaur.com/api/messages/search',
auth: {
username: 'API_key',
},
body: {
sentTo: 'yourEmail',
},
qs: {
server: 'yourServer',
page: 0,
itemsPerPage: 50,
},
});
答案 2 :(得分:0)
我今天必须面对这个。 如果您收到原始的回复(字符串),则必须以这种方式获取链接:
const links = body.split("href=http://my.url.com");
var activation_link = links[0].match(/\bhttp?:\/\/\S+/);
activation_link= activation_link[0].replace('"','')
cy.visit(activation_link)