Попытка входа в gmail при использовании TestCafe

#ssl #testing #automated-tests #gmail #testcafe

#ssl #тестирование #автоматизированные тесты #gmail #testcafe

Вопрос:

Я изучаю TestCafe и пытаюсь создать учетную запись на веб-сайте, а затем войти в Gmail, чтобы найти ссылку для активации. Когда я пытаюсь это сделать, я просто получаю сообщение «браузер не защищен», когда я добираюсь до части ввода пароля. Как мне заставить Gmail доверять TestCafe?

Ответ №1:

Хотя вам это может удастся, это не очень хороший подход, потому что:

  • это медленно делается через графический интерфейс
  • это сложно, потому что селекторы, скорее всего, изменятся, и у вас нет контроля над селекторами электронной почты Google, поэтому вы даже не узнаете, изменили ли они их

Лучшим подходом было бы использовать сервис, подобный Mailosaur, где вы можете создать учетную запись и получать электронные письма, которые позже можно запросить через API. Вместо того, чтобы выполнять весь поток e2e через графический интерфейс, вы запрашиваете электронное письмо через API Mailosaur, и если такое электронное письмо существует, вы получите ответ, который вы можете проанализировать и проверить на наличие различных вещей.

Я делал это в прошлом, вы можете увидеть мой пост здесь: https://sqa.stackexchange.com/questions/40427/automating-verification-of-sent-email-sms-messages/45721#45721 Это точно Mailosaur и Testcafe (плюс для этого требуется пакет axios), так что, похоже, это то, что вы ищете.

Чтобы добавить тот же код здесь:

 import config from '../config';
import { customAlphabet } from 'nanoid';
import axios from 'axios';
import Newsletter from '../Objects/newsletter';

async function request (reqObject) {  
    try {
        return await axios(reqObject);            
    } catch (error) {
        console.error(error);
    }
}

function serverId () {
    return process.env.MAILOSAUR_SERVER_ID;
}

function mailosaurFullEmail (id) {
    return (id ? id : nanoid())   '.'   serverId() 
          '@'   config.mailosaurDomain;
}

fixture `Newsletter`    
    .page(baseUrl);

test             
    ('Sign Up For Newsletter', async t => {

        const id = (customAlphabet('1234567890', 10))();

        await t
            .typeText(Newsletter.newsEmailInput, mailosaurFullEmail(id))
            .click(Newsletter.consent)
            .click(Newsletter.sendButton);

        let res = await request({
            method: 'POST',
            url: config.mailosaurUrlEmail   serverId(),
            headers: {
                'Authorization': 'Basic ' 
                      Buffer.from(process.env.MAILOSAUR_API_KEY)
                        .toString('base64'),
                'Content-Type': 'application/json'
            },
            data: {
                sentTo: mailosaurFullEmail(id)
            }
        });       
        
        await t
            .expect(res.status).eql(200);
});
  

и для этого требуются некоторые значения конфигурации:

 {
    "mailosaurUrlEmail": "https://mailosaur.com/api/messages/await?server=",
    "mailosaurDomain": "mailosaur.io"
}
  

Это определенно намного лучше, но у него все еще есть некоторые ограничения:

  • API Mailosaur все еще может измениться, поэтому он не будет точно без какого-либо обслуживания
  • предполагается, что электронное письмо отправляется сразу после действия пользователя (в моем случае — рассылка новостей), но это может быть далеко от реальности во многих ситуациях, например, когда электронные письма отправляются в очередь, где отправка электронного письма может занять несколько минут

Если вам абсолютно необходимо сделать это через Gmail, вам все равно лучше обратиться к их API, который должен также позволять вам искать и запрашивать сообщения электронной почты.

Ответ №2:

Существует проблема, связанная с входом в Google. Вы можете попробовать включить параметр учетной записи Google «Разрешить менее безопасные приложения», чтобы обойти эту проблему. Пожалуйста, обратите внимание, что этот параметр доступен для отключенной 2-шаговой проверки.