赛普拉斯-访问从第三方获得的URL(电子邮件)

时间:2019-03-06 22:17:41

标签: javascript cypress

在测试中,我想访问通过电子邮件发送的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+'');
            })
    })
});

3 个答案:

答案 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)