Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class SendAndReceiveMailTest {
- /*
- имя тест-класса - формулируй в общем - что мы тестируем
- GmailTest - было бы правильнее
- было бы несколько тест-классов - можно было бы детальнее имя тест-класса делать
- а вот уточняться до тестируемых действий - будем в имени тест-метода
- https://docs.google.com/document/d/13dNyFGbI7mV22UUhH8E0LJ7SzabAmX7Bw7VCHScYfiU/edit#heading=h.xbzelgj7l3up
- */
- *******************************
- public void testLogin()
- ...
- public void testSendEmail()
- /*
- в задании - Automate the following gmail scenario
- делаем - один сценарий
- еще момент
- тест-методы - должны быть независимыми
- в твоей реализации - метод testSendEmail() зависит от testLogin()
- testLogin() - должен отработать первым
- не стоит реализовывать тест-методы - зависимыми
- да и JUnit - реализован так, что порядок запуска тест-методов - случаен
- https://github.com/junit-team/junit4/wiki/test-execution-order
- можно конечно - и задать порядок запуска
- но - это bad practice - т к это - не эффективно, да и ненадежно
- https://youtu.be/yyzGP2CyMRM
- вот это видео Николая Алименкова - советую смотреть и пересматривать
- думаю, все
- */
- ***************************************************
- /*
- делаем - один тест-метод
- что тестируем
- Login
- Send
- Receive
- Search
- можно - оттолкнувшись от этого - и имя метода сформулировать
- */
- @Test
- public void testLogin() {
- loginPage.navigateToGoogle();
- loginPage.clickSignIn();
- /*
- вместо этого - можно сразу зайти на http://gmail.com
- */
- loginPage.setEmail();
- loginPage.setPassword();
- /*
- а это - можно объединить в один метод - login
- */
- }
- @Test
- public void testSendEmail() {
- gmailPage.navigateToInbox();
- /*
- мы уже в инбоксе
- нам не нужно туда переходить
- */
- gmailPage.clickCompose();
- gmailPage.setAdress(emailAddress);
- gmailPage.setSubject("TestGmail");
- gmailPage.send();
- /*
- эти действия - как раз send
- мы же не будем по отдельности это делать
- послать письмо = нажать Compose + ввести - кому письмо + ввсести тему письма + нажать send
- все это - send
- если запустить этот тест дважды
- то проверка
- ensure only 1 is present in search results
- не пройдет
- т к таких писем - будет два
- значит - нужно использовать уникальный Subject
- это можно сделать разными способами
- хоть бы и добавить к тексту - дату-время в миллисекундах
- есть много вариантов
- */
- gmailPage.navigateToInbox();
- /*
- перед такой проверкой хорошо бы принудительно получить почту
- почта обновляется согласно настройке аккаунта
- не факт - что таймаута хватит - чтобы отправленное нами письмо отразилось в Inbox
- перед проверкой - что письмо пришло
- хорошо выполнить действие - принудительно получить почту = обновить -
- нажать на кнопку - http://joxi.ru/V2VBQLqf05vL92
- кстати, в тест-классе - не вижу установки нового значения для таймаута
- в задании -
- Gmail loads pretty long time… You can increase selenide timeouts used in “shoulds”
- E.g.: Configuration.timeout = 15000;
- мне вообще понадобилось 20 секунд
- */
- gmailPage.assertLetterIsIn("TestGmail");
- /*
- будем считать, что мы контролируем поток входящих и исходящих для этого аккаунта
- потому - нам нужно проверить - что самое верхнее письмо в списке писем - с таким-то текстом
- */
- gmailPage.navigateToSent();
- gmailPage.assertLetterIsIn("TestGmail");
- /*
- также и тут
- нужно проверить самое верхнее письмо
- */
- /*
- не реализовал вот этот кусок задания
- search the arrived mail by topic and ensure only 1 is present in search results
- т к ищем arrived mail - значит нужно перейти в Inbox
- и затем - с помощью строки поиска - отфильтровать список мейлов
- и убедиться - что в списке - единственное письмо + с правильным текстом (Subject-ом)
- */
- }
- }
- **********************************************
- src/main/java/com/gmail/config/Config.java
- public class Config {
- /*
- Это - тестовые данные
- тестовые данные - располагай только в ветке проекта src / test
- ниже еще коснусь темы структуры проекта
- еще важно - пейджи никогда не используют напрямую тестовые данные
- (в том смысле - что из пейджа нелься обращаться к такому классу Config )
- ниже еще будет про это
- */
- *****************************************
- public void setEmail() {
- $("#Email").setValue(emailAddress).submit();
- }
- public void setPassword() {
- $("#Passwd").setValue(password).submit();
- }
- /*
- в методах пейджа - не работай с конкретными тестовыми данными
- не "зашивай" какие-то конкретные значения
- и не обращайся к объявленным переменным - тестовым данным
- пусть методы пейджа будут иметь параметры
- и именно через параметры - получают тестовые данные
- при такой реализации - получишь универсальные инструменты
- и прозрачную тестовую логику в тест-классах
- (ведь там при вызове методов пейджа - мы явно укажем тестовые данные в качестве параметров)
- */
- ******************************
- public void navigateToInbox() {
- open("https://mail.google.com/mail/#inbox");
- }
- public void navigateToSent() {
- open("https://mail.google.com/mail/#sent");
- }
- /*
- реализуй эти действия - как действия на UI
- мы это тоже тестируем)
- а реальный пользователь - он переходит в инбокс или сент - не через ввод нужного урла
- а кликая на соответветствующих элементах
- */
- ********************************
- public void assertLetterIsIn(String subject) {
- $(byText(subject)).should(exist);
- }
- /*
- это слишком неточно
- оперируй коллекцией - списком мейлов
- тут проверь - что в самом верхнем элементе - содержится такой-то текст
- и тебе еще одна проверка понадобится - для реализации
- search the arrived mail by topic and ensure only 1 is present in search results
- так что - надо будет оперировать списком мейлов)
- */
- *************************************
- /*
- http://joxi.ru/nAyqEx7HXvxQoA
- вот пример хорошей структуры проекта
- в src \ main
- core - универсальное, что можно переиспользовать в разных проектах
- pages - пейджи тоже можно переиспользовать для других тестов этого же приложения
- в src \ test
- testdata - тестовые данные (если такие есть и они вынесены в отдельный класс)
- testconfigs - предки тест-класса (так можно их изолировать от собственно тест-классов - чтоб легче было ориентироваться
- про пекеджи еще немного)
- если GroupID = com.somesite
- а проект todomvctest
- то пакет корневой должен быть com.somesite.todomvctest
- логика - чтобы "не смешивались имена сущностей"
- внутри одной компании - может быть несколько проектов)
- и у всех у них один com.somesite - базовый пекедж
- но для каждого проекта должен быть свой “базовый пекедж проекта"
- иначе все смешается)
- важно то, что когда этот проект выльется в отдельную библиотеку,
- то не будет конфликтов при его подключении
- */
Advertisement
Add Comment
Please, Sign In to add comment