Проверка почты после отправки формы регистрации в Selenium WebDriver

После заполнения формы регистрации необходимо проверить пришло ли письмо в почтовый сервис (mail.ru, mail.yandex.ru, gmail.com) + кликнуть на ссылку активации аккаунта.

Подскажите, как вы проверяете пришло письмо или нет, и клик по ссылке в письме? Как в настоящее время это делать наиболее правильно?

Нашел только способ с ипользованием сервисов одноразовой почты, когда просто кликами в неё заходим через xpath. Но, во-первых, сейчас во всех таких сервисах есть капча, во-вторых, мне кажется это не особо хороший способ.

Может есть где-то статья с подробным разбором данной темы для “чайника”? Видел упоминания про java mail , но статьи как это всё подключить не нашел.

Использую: Intellij Idea, Java, Seleinium Webdriver, Maven.

Наиболее удобное решение это найти сервис с открытым API и сделать это через него.

  • написать waiter нужного письма
  • распарсить бади
  • заюзать линк
1 лайк

Можете подсказать статьи/видео по данной теме?

Или может какая библиотека есть в Java или метод в Selenium, которые упрощают работу с API?

Волшебное слово RestAssured

1 лайк

Спасибо!

И, наверно, совсем глупый вопрос - c помощью библиотеки RestAssured можно подключиться к API почтовых сервисов (mail.ru, mail.yandex.ru, gmail.com) прямо из Intellij Idea?

к апи не подключаются, его используют кодом
создайте ящик, получите токен аутентификации, с ним выполните запросы, которые описаны в спецификации к API используемой вами почты и дальше это реализуйте в коде

А где про это можно подробнее почитать/посмотреть? Я совсем чайник :frowning:

погуглить

api testing postman

Нужно именно на Java, подключаюсь в Intellij Idea

мне кажется, у вас не хватает некоей общей компьютерной грамотности, либо понимания, что такое разработка вообще. idea не равно java

джава это язык программирования, вы можете код писать в блокноте и запускать его из консоли, если установите на компьютер саму java в виде java development kit например

intellij idea это среда разработки на джаве и языках, что исполняются джавой (kotlin, groovy и иже с ними)

api - это выставленный наружу интерфейс, который позволяет делать запросы к себе и отдаёт ответы на эти запросы; и он не зависит от того, из idea вы запросы эти делать будете кодом на java, или например powershell-ом, если у вас винда

потому я вам написал, что попробуйте установить postman и в нём поработать с api почты, которую вы будете использовать в тестах

Спасибо за подробные разъяснения.

То что Intellij это не Java понимаю, не совсем понял как результаты взаимодействия с API почты через Postman мне применить к тестам на Java.

Созданный тест на Java в Intellij производит регистрацию пользователя.

Далее нужно проверить пришло ли письмо в почтовый сервис (mail.ru, mail.yandex.ru, gmail.com) , а также кликнуть на ссылку активации аккаунта в письме. Вот к этому не знаю как подступиться. Пробовал как пишут в статьях через IMAP подключиться, но пишет, что пароль неверный, хотя код такой же как в статье-видео. По подключению через API не смог найти подробной информации как в Java через API почты можно найти нужное сообщение и кликнуть в теле письма по ссылке. Может подскажете подробную статью-видео по данной задаче?

Вроде задача довольно популярная, что при регистрации нужно проверять пришло ли письмо и кликать для активации аккаунта, восстановления пароля и пр. Но нигде не могу найти разбора решения данной задачи :frowning:

Запуск следующего кода возвращает ошибку “Exception in thread “main” jakarta.mail.AuthenticationFailedException: failed to connect, no password specified?”

Подскажите, пожалуйста, что может быть не так?

package Mail;

import jakarta.mail.*;

import java.util.Properties;

public class GMail {

public static void check(String host, String storeType, String user,
                         String password)
{
    try {

        //create properties field
        Properties properties = new Properties();

        properties.put("mail.pop3.host", host);
        properties.put("mail.pop3.port", "995");
        properties.put("mail.pop3.starttls.enable", "true");
        Session emailSession = Session.getDefaultInstance(properties);

        //create the POP3 store object and connect with the pop server
        Store store = emailSession.getStore("pop3s");

        store.connect(host, user, password);

        //create the folder object and open it
        Folder emailFolder = store.getFolder("INBOX");
        emailFolder.open(Folder.READ_ONLY);

        // retrieve the messages from the folder in an array and print it
        Message[] messages = emailFolder.getMessages();
        System.out.println("messages.length---" + messages.length);

        for (int i = 0, n = messages.length; i < n; i++) {
            Message message = messages[i];
            System.out.println("---------------------------------");
            System.out.println("Email Number " + (i + 1));
            System.out.println("Subject: " + message.getSubject());
            System.out.println("From: " + message.getFrom()[0]);
            System.out.println("Text: " + message.getContent().toString());

        }

        //close the store and folder objects
        emailFolder.close(false);
        store.close();

    } catch (NoSuchProviderException e) {
        e.printStackTrace();
    } catch (MessagingException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public static void main(String[] args) {

    String host = "pop.gmail.com";// change accordingly
    String mailStoreType = "pop3";
    String username = "happy.snale@gmail.com";// change accordingly
    String password = "указал свой пароль";// change accordingly

    check(host, mailStoreType, username, password);

}

}

В настройках Gmail протокол POP включил.

Подскажите, пожалуйста, почему может не импортироваться RestAssured Скриншот 12-05-2023 13:22:09.jpg , хотя в pom.xml зависимость добавил Скриншот 12-05-2023 13:22:09.jpg и скачал.

думаю из-за scope test уберите заработает интеллисен

1 лайк

Действительно, в этом была проблема. Спасибо!

При подключении к Яндекс.Почте по IMAP возникает ошибка “Exception in thread “main” jakarta.mail.MessagingException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target”.

Погуглил - пишут, что дело в неизвестном SSL-сертификате сервера, к которому обращаюсь. Скачал сертификат mail.yandex.ru , установил в хранилище через keytool. Но не помогло.

Может кто-то сталкивался с данной проблемой?

Нашел, может быть кому-то пригодится, нужно прописать:

prop.setProperty(“mail.imaps.ssl.trust”, “imap.yandex.ru”);