Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- static ElementsCollection letters = $$(".aDP tbody tr div>span>b");
- /*
- посмотри - что ты находишь с помощью своего локатора
- сравни с http://joxi.net/krDOZldF0RKkBA
- цель - найти именно письма, а не их темы
- каждое письмо = вся строка, которая описывает письмо
- на иллюстрации - есть подсказки и для локатора
- насчет имени для коллекци писем - я бы переменную назвала mails
- цель - не использовать разные термины для одного понятия
- уже ведь термины gmail, email, mails применяем
- а тут еще и letters
- */
- ********************************
- public static void mailLogin(String email, String password)
- /*
- достаточно точно будет - имя метода - login
- */
- ****************************************
- static String timeStamp = new SimpleDateFormat("yyyyMMddHHmmss").format(Calendar.getInstance().getTime());
- /*
- что это
- это тестовые данные - уникальный subject
- вопрос - что делают тестовые данные в пейдже?
- и еще вопрос - почему имя переменной не говорит - что это по сути
- а по сути это - тестовые данные - subject
- да, ты собирал эту строку как timeStamp
- но ведь что это, для чего это - это именно тестовые данные - subject
- нужно поменять имя переменной
- я бы еще рекомендовала - помимо уникальной составляющей - использовать в строке что-то наглядное
- вот так например
- timeStamp = "subject" + new SimpleDateFormat("yyyyMMddHHmmss").format(Calendar.getInstance().getTime());
- и еще очень важное
- не располагай тестовые данные внутри пейджа
- тестовые данные - это то, что нам нужно для реализации шагов в тест-методе
- но этого совершенно не нужно для реализации методов пейджа
- у нас же есть цель - чтобы методы пейджа были инструментами
- которые можно переиспользовать многократно
- потому - все что нужно для реализации метода пейджа - реализуй как его мараметры
- и уже в тест-методе
- объявишь и инициализируешь subject
- и передашь его в качестве параметра
- в тот же метод send
- такой подход обеспечит наиболее универсальный способ реализации методов пейджа
- и мало того - еще это скажется хорошо - на логике тест-метода
- она будет легче пониматься благодаря такой организации - т к мы ничего важного не спрятали внутрь методов пейджа
- код будет выглядеть понятным и логичным - не будет "магии" -
- каждый шаг - понятен, чем этот шаг оперирует - тоже понятно
- */
- ****************************************
- public static void sendMail(String address){
- /*
- имени send - достаточно
- в качестве параметров - передавай и email, и subject = все тестовые данные
- и не забывай - не нужно вводить новые и новые термины для переметров методов
- тут - будет к месту - email и subject
- исходя из задач и уже применяемых терминов
- */
- *****************************************
- public static void assertInInbox(String...timeStamps){
- letters.shouldHave(exactTexts(timeStamps));
- }
- /*
- ну да...
- ты и спрашивал про эту проверку
- много тут вопросов к коду)
- давай разбиратья вообще по сути
- какие проверки нам нужны
- читаем задание
- check that mail arrived
- check that mail exist in “Sent”
- search the arrived mail by topic and ensure only 1 is present in search results
- первые 2 проверки - касаются одного, спмого верхнего письма из списка писем
- т е по сути = мы дважды воспользуемся одной и той же проверкой (и для Inbox, и для Sent)
- проверкой состояния самого верхнего письма в списке
- потому и текущее название метода - надо переделывать
- имя метода должно точно отражать - что делает метод
- третья проверка - проверка состояния всего списка
- количество элементов - такое-то
- и тексты у элементов - такие-то
- начнем с первой и второй проверок
- что мы проверяем
- мы проверяем состояние конкретного письма
- какого - самого верхнего в списке = с индексом = 0
- разумно и индекс вынести как параметр метода
- что проверяем = assertMail
- чем уточняем - int index,
- вхождение какого текста ищем в мейле - String mailHeaderText
- почему не timeStamp - думаю, уже понятно
- почему не subject - потому что мы просто проверим - что в тексте элемента = письма
- содержится такой-то текст
- т е - мы не будем внутри элемента-письма - уточняться до внутреннего элемента - subject-а
- у нас есть коллекция мейлов - mails
- как получить такой-то єлемент по индексу = mails.get(...)
- как проверить - что в тексте элемента - содержится такой-то текст - воспользоваться в проверке кондишеном text
- третья проверка
- верно, ее разумно реализовывать как =
- проверить текстЫ мейлов в списке мейлов
- тогда эту проверку можно будет использовать и для того чтоб проверить
- что писем в списке только одно и его текст - такой-то
- и в других вариантах - тоже эта проверка пригодится
- только вот кондишен - exactTexts - уже не подойдет
- т к нам нужно проверить - вхождение текста, а не равенство
- exactTexts & texts - оба кондишена проверяют количество + порядок + тексты
- тексты - проверяют по-разному
- exactTexts - на равенство
- texts - на вхождение
- нам как раз вариант проверки на вхождение пригодится больше
- по именам для метода е иго параметров - писать не буду
- для предыдущего ассерта - расписала
- тут - подумай самостоятельно
- */
- ****************************
- public static void assertinSearch() {
- $$(byText(timeStamp)).filter(visible).shouldHave(exactTexts(timeStamp));
- }
- /*
- такой проверки тебе не нужно
- читай текст выше
- там все расписано
- если тебе нужно проверить состояние списка мейлов - так и отталкивайся от него
- а не от каких-то новых локаторов
- */
- ***************************************
- public class GoogleMailTest extends TestData {
- /*
- Плохой вариант для организации иерархии
- если ты не можешь про предка и потомка сказать
- потомок - это тоже предок
- то значит - вариант с наследованием - не годится
- тест-класс - это тоже тестовые данные
- можем сказать?
- Просто используй данные из TestData в тесте
- Я не вижу конфигурирования таймаута
- если этот код в TestData - это в корне не верно
- настрой таймаут в тест-классе
- */
- @Test
- public void openMailAndCheckHisWork () {
- /*
- что мы проверяем
- login, send, receive and search
- если перечислять - то все
- если не перечислять - воспользуйся советами из faq -
- по неймингу
- там есть советы именно для е2е методов
- и ты ими уже пользовался
- */
- ***************************************
- mailLogin(TestData.mail,TestData.passwd);
- /*
- и тут не сокращай
- не TestData.passwd
- а TestData.password
- */
- *****************************************************
- searchMail();
- /*
- согласно задания
- search the arrived mail
- перед поиском - вернись в inbox
- и тут заостряю внимание - втрока поиска = это тоже тестовые данные
- и должны быть переданы как параметр в метод пейджа
- думай над неймингом)
- */
Advertisement
Add Comment
Please, Sign In to add comment