【问题标题】:Cypress - Visit a URL obtained from a 3rd party(email)赛普拉斯 - 访问从第 3 方获得的 URL(电子邮件)
【发布时间】:2019-07-28 16:56:59
【问题描述】:

在我的测试中,我想访问通过电子邮件发送的 URL。我可以成功地将 URL 保存在变量中,但无法让 cypress 转到该 URL。我不断收到以下错误。我不完全理解 cypress 是“promise-like”的,所以我不知道如何解决这个问题

未捕获(承诺) CypressError:赛普拉斯检测到您返回 来自命令的承诺,同时还调用一个或多个 cy 命令 在那个承诺中。

返回承诺的命令是:

cy.get()

你在 promise 中调用的 cy 命令是:

cy.request()

因为 Cypress 命令已经类似于 Promise,所以您不需要 包装它们或返回您自己的承诺。

赛普拉斯将使用最终的赛普拉斯解决您的命令 命令产生。

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+'');
            })
    })
});

【问题讨论】:

    标签: javascript cypress


    【解决方案1】:

    我今天必须面对这个。 如果您收到原始正文响应(字符串),则必须以这种方式获取链接:

                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)
    

    【讨论】:

      【解决方案2】:

      我也像你一样尝试过,但赛普拉斯不允许。 您必须通过 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,
        },
      });
      

      【讨论】:

        【解决方案3】:

        这不就像从 cy.request 中删除所有引号和加号一样简单吗?这就是我们使用存储的 url 的方式,并且有效。但是存储的 url 不是来自电子邮件,而是来自页面上的元素

        【讨论】:

        • 删除这些将导致相同的错误。我认为问题的根源在于赛普拉斯不喜欢我调用邮件 api,然后运行 ​​cypress 命令。我不确定如何解决这个问题。我认为这是一个非常常见的测试,需要自动化,因此赛普拉斯应该有某种解决方案。
        猜你喜欢
        • 2019-02-19
        • 2022-08-18
        • 1970-01-01
        • 1970-01-01
        • 2023-01-29
        • 2020-08-15
        • 2022-01-22
        • 2020-10-28
        • 1970-01-01
        相关资源
        最近更新 更多