Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class Gmail {
- static String Timestamp = new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime()); // Instant.now().getEpochSecond();
- static String subject = String.valueOf("Gmail test" + Timestamp);
- /*
- см прошлое ревью - строки 11-25
- написание имени переменой Timestamp
- тестовые данные - не должны жить в пейдже
- Раньше переменная subject жила в тест-методе
- и это было правильнее
- Timestamp - в нашем случае - это тоже часть тестовых данных, лучше прямо в тест-методе
- String subject = "Iriny's test" + new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime());
- или второй вариант
- в тест-методе
- String subject = getUniqueText("Iriny's test")
- а в классе-контейнере универсальных статических методов Heplers - метод
- getUniqueText со сторовым параметром prefix
- который собственно и возхвращает уникальную строку с заданным префиксом
- prefix + new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime());
- с переменной получится красивее - и в тест-методе код будет аккуратнее
- и универсальный метод появится - можно будет его и для других целей использовать
- */
- **********************************************
- public static ElementsCollection mails = $$("[role=\"main\"] .zA");
- /*
- Можно избавиться от бекслешей, применяя одинарные кавычки
- "[role='main'] .zA"
- */
- ********************************************************
- public static void sendMail(String email, String subject) {
- $(byText("COMPOSE")).click();
- $(By.name("to")).setValue(email);
- $(byAttribute("aria-label", "Subject")).setValue("Test");
- $(byAttribute("role", "textbox")).setValue(subject);
- /*
- нам ведь переданый subject нужно было внести вот сюда http://joxi.ru/5md7jYwtvzYZYr
- в прошлой версии было именно так)
- для чего изменила это?
- а сам текст письма можно оставить пустым - you can leave mail body empty, but set topic
- для упрощения кода - используй $(By.name(...)) - у поля наглядный name
- */
- $(byText("Send")).click();
- }
- public static void assertMailReceived(String sublect) {
- mails.get(0).shouldHave(text(sublect));
- }
- /*
- Нам такая проверка - что самое верхнее письмо в списке - такое-то
- Понадобится и для реализации
- check that mail arrived
- и для реализации
- check that mail exist in “Sent”
- Будем считать - что мы полностью контролируем поток писем тестового аккаунта
- и нам для осуществления таких проверок нужно проверить состояние верхнего письма в скиске писем =
- последнее полученное и последнее отправленное
- т е - мы пишем более универсальный матод assertMail
- смотрим на реализацию
- мы проверяем нулевое письмо списка
- для конкретно этой задачи - этого достаточно
- но - “You definitely know that you will reuse all steps in other tests”
- разумно вынести индекс проверяемого письма - как параметр метода
- так бОльшее количество тестовых ситуаций можно проверить
- что до имени параметра sublect
- даже если поправить на subject - будет не совсем точно)
- проверка у нас не такая точная
- мы не subject проверяем, а сто некий текст входит в текст заголовка письма
- получим - что нам тут подошла бы такая сигнатура метода
- public static void assertMail(int index, String text)
- ну или что-то похожее) - возможно, ты придумаешь вариант получше
- */
- public static void refreshMailPage() {
- $(".gb_xb").click();
- }
- /*
- см прошлое ревью, строки 56-58
- */
- *************************************************************
- /*
- с прошлой версии решения - ушел метод findMail(String subject)
- как он был реализован у тебя - смотри строки 46-51
- помимо старых комментариев - стоит уточнить имя и параметр
- мы можем искать, используя строку поиска subject: ....
- тогда это будет поиск именно по subject
- иначе - это поиск по некому тексту письма
- потому - или уточни реализацию и оставь имя параметра как сейчас
- или измени имя параметра - выше приводила более нейтральный вариант
- что до имени метода - ниже приведу вариант - который позволит и имена методов чуть сократить
- */
- }
- *****************************************************
- public class GmailTest{
- {
- Configuration.timeout = 15000;
- }
- /*
- Лучше такое делать или в BeforeClass-методе, или в static initialization block -
- чтобы даже при наличии нескольких тест-методов - этот код выполнялся ежиножды до запуска всех тестов
- instance initialization block - будет вызываться перед каждым тестом
- (как если бы ты это разместила в конструкторе тест-класса или в Before-методе)
- в это сложно поверить, но очень легко проверить - вставь в этот блок System.out.println(...)
- реализуй пару тест-методов и запусти на выполнение все тест-методы класса
- строчка выведется столько раз - сколько тест-методов будет запущено
- */
- @Before
- public void loginPassword(){
- open("https://www.gmail.com");
- signIn(logIn, password);
- }
- /*
- Я бы на данном этапе - не выносила этот код в Before-метод
- мы уже позаботились о том, чтобы были инструменты, которые можно переиспользовать - есть пейдж
- и пока нам ничего не известно о будущих тест-методах
- потому - торопиться не надо и что-то выносить куда-то раньше времени - предполагая -
- что именно эта часть будет нужна, как начало второго тест-метода
- одно дело - пейджа на будущее реализовать = инструменты
- другое дело - застолбить - тест-методы начинаем так-то
- думаю - второе - излишне)
- есть такой тезис - premature optimization is evil, погугли)
- */
- @Test
- public void SendLetterTest() {
- /*
- В тест-методе надо было сделать не только это)
- посмотри задание
- имя тест-метода - начни с test
- и перечисли - что мы тут тестим
- в данном случае - это реально) - чтобы имя оставалось читаемым
- посмотри на такой вариант использования нескольких пейджей
- тут идея с несколькими пейджами - несколько за уши притянута
- но зато можно на малых формах посмотреть - как это и что дает в использовании
- за счет вызова с указанием имени класса мейджа-модуля - можно имена методов полаконичнее делать
- выбери те идеи, что понравились
- обрати внимание на имена методов и пейджей и на саму последовательность действий
- поскольку указываем имя класса педжа-модуля - именуем методы с учетом этого - лаконичнее
- Gmail.visit();
- Gmail.login(TestData.email, TestData.password);
- Mails.send(TestData.email, subject);
- Menu.openInbox();
- Mails.assertMail(0, subject);
- Menu.openSent();
- Mails.assertMail(0, subject);
- Mails.searchBySubject(subject);
- Mails.assertMails(subject);
- */
Advertisement
Add Comment
Please, Sign In to add comment