Как использовать два почтовых ящика Gmail с помощью cypress.io - PullRequest
2 голосов
/ 03 августа 2020

Как я могу использовать 2 учетных записи gmail с cypress

Я создаю 2 файла credentialsclient. json и учетные данные. json и создаю 2 файла токенов gmail.

Теперь я хочу чтобы использовать функцию получения сообщений для двух писем в других тестах.

Я пишу выбранный код в свой индекс. js файл,


module.exports = (on, config) => {
  on("before:browser:launch", (browser = {}, launchOptions) => {
    // `args` is an array of all the arguments that will
    // be passed to browsers when it launches
    console.log(launchOptions.args); // print all current args
    if (browser.family === "chromium" && browser.name !== "electron") {
      // auto open devtools
      launchOptions.args.push("--auto-open-devtools-for-tabs");
      // allow remote debugging
      // launchOptions.args.push("--remote-debugging-port=9221");
      // whatever you return here becomes the launchOptions
    } else if (browser.family === "firefox") {
      // auto open devtools
      launchOptions.args.push("-devtools");
    }
    return launchOptions;
  });
  on("task", {
    "gmail:get-messages": async args => {
      const messages = await gmail_tester.get_messages(
        path.resolve(__dirname, "credentialsclient.json"),
        path.resolve(__dirname, "gmail_tokenclient.json"),
        args.options
      );
      return messages;
    }
  });
};

И для следующего gmail я хочу использовать другой function

on("task", {
    "gmail:get-messages": async args => {
      const messages = await gmail_tester.get_messages(
        path.resolve(__dirname, "credentials.json"),
        path.resolve(__dirname, "gmail_token.json"),
        args.options
      );
      return messages;
    }

Но в двух тестах с использованием одного и того же gmail. Как я могу разделить счета. Спасибо

Ответы [ 2 ]

2 голосов
/ 03 августа 2020

Я не совсем уверен, почему вы используете задачу вместо функции, но вы можете просто добавить свойство к аргументам, которые вы передаете задаче:

on("task", {
    "gmail:get-messages": async args => {
      // Use the credentials property or an empty string if none is provided
      const credentialType = args.credentials || '';

      const messages = await gmail_tester.get_messages(
        path.resolve(__dirname, `credentials${args.credentials}.json`),
        path.resolve(__dirname, `gmail_token${args.credentials}.json`),
        args.options
      );
      return messages;
    }

И когда вы вызываете свой задача, которую вы просто передаете в типе учетных данных:

cy.task('gmail:get-messages', { options: {}, credentials: 'client' });
0 голосов
/ 05 августа 2020

Я использую 2 аргумента, вот так.

on("task", {
    "gmail:get-messagescl": async args => {
      const messages = await gmail_tester.get_messages(
        path.resolve(__dirname, "credentialsclient.json"),
        path.resolve(__dirname, "gmail_tokenclient.json"),
        args.options
      );
      return messages;
    },
    "gmail:get-messages": async args => {
      const messages = await gmail_tester.get_messages(
        path.resolve(__dirname, "credentials.json"),
        path.resolve(__dirname, "gmail_token.json"),
        args.options
      );
      return messages;
    }
  });

И в команде. js Я пишу 2 функции

Cypress.Commands.add('checkEmail', (emailaddr, title,) => {
    const yestDate = Cypress.moment().add(-1, 'hours').format('YYYY, MM, DD');
    cy.task("gmail:get-messages", {
        options: {
          from: emailaddr,
          subject: title,
          include_body: true,
          after: new Date (yestDate) 
         // before:  new Date(todaysDate)
        }
      })
})

Cypress.Commands.add('checkEmailCl', (emailaddr, title,) => {
    const yestDate = Cypress.moment().add(-1, 'hours').format('YYYY, MM, DD');
    cy.task("gmail:get-messagescl", {
        options: {
          from: emailaddr,
          subject: title,
          include_body: true,
          after: new Date (yestDate) 
         // before:  new Date(todaysDate)
        }
      })
})

В своих тестах я уже использую свои функции


cy.checkEmail(emailadr, title ).then(emails => {
          assert.isAtLeast(
            emails.length,
            1,
            "Expected to find at least one email, but none were found!"
          );
          const body = emails[0].body.html;
          cy.log(body)

          assert.isTrue(
            body.indexOf(
              "https://u15696639.ct.sendgrid.net/ls/click?upn="
            ) >= 0,
            "Verify your email"
          );

И для другого теста используя

 cy.checkEmailCl(emailadr, title ).then(emails => {
...