julia_v_iluhina

Untitled

Jul 28th, 2016
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.75 KB | None | 0 0
  1. public class Gmail {
  2.  
  3.     static String Timestamp = new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime()); //  Instant.now().getEpochSecond();
  4.  
  5.     static String subject = String.valueOf("Gmail test" + Timestamp);
  6. /*
  7.     см прошлое ревью - строки 11-25
  8.     написание имени переменой Timestamp
  9.     тестовые данные - не должны жить в пейдже
  10.     Раньше переменная subject жила в тест-методе
  11.     и это было правильнее
  12.     Timestamp - в нашем случае - это тоже часть тестовых данных, лучше прямо в тест-методе
  13.     String subject = "Iriny's test" + new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime());
  14.  
  15.     или второй вариант
  16.     в тест-методе
  17.     String subject = getUniqueText("Iriny's test")
  18.  
  19.     а в классе-контейнере универсальных статических методов Heplers - метод
  20.     getUniqueText со сторовым параметром prefix
  21.     который собственно и возхвращает уникальную строку с заданным префиксом
  22.     prefix + new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime());
  23.  
  24.     с переменной получится красивее - и в тест-методе код будет аккуратнее
  25.     и универсальный метод появится - можно будет его и для других целей использовать
  26. */
  27. **********************************************
  28.     public static ElementsCollection mails = $$("[role=\"main\"] .zA");
  29. /*
  30.     Можно избавиться от бекслешей, применяя одинарные кавычки
  31.     "[role='main'] .zA"
  32. */
  33.  
  34. ********************************************************
  35.  
  36.     public static void sendMail(String email, String subject) {
  37.         $(byText("COMPOSE")).click();
  38.         $(By.name("to")).setValue(email);
  39.         $(byAttribute("aria-label", "Subject")).setValue("Test");
  40.         $(byAttribute("role", "textbox")).setValue(subject);
  41.         /*
  42.             нам ведь переданый subject нужно было внести вот сюда http://joxi.ru/5md7jYwtvzYZYr
  43.             в прошлой версии было именно так)
  44.             для чего изменила это?
  45.  
  46.             а сам текст письма можно оставить пустым - you can leave mail body empty, but set topic
  47.             для упрощения кода - используй $(By.name(...)) - у поля наглядный name
  48.         */
  49.         $(byText("Send")).click();
  50.     }
  51.  
  52.     public static void assertMailReceived(String sublect) {
  53.         mails.get(0).shouldHave(text(sublect));
  54.     }
  55.     /*
  56.         Нам такая проверка - что самое верхнее письмо в списке - такое-то
  57.         Понадобится и для реализации
  58.             check that mail arrived
  59.         и для реализации
  60.             check that mail exist in “Sent”
  61.         Будем считать - что мы полностью контролируем поток писем тестового аккаунта
  62.         и нам для осуществления таких проверок нужно проверить состояние верхнего письма в скиске писем =
  63.         последнее полученное и последнее отправленное
  64.        
  65.         т е - мы пишем более универсальный матод assertMail
  66.  
  67.         смотрим на реализацию
  68.         мы проверяем нулевое письмо списка
  69.         для конкретно этой задачи - этого достаточно
  70.         но - “You definitely know that you will reuse all steps in other tests”
  71.         разумно вынести индекс проверяемого письма - как параметр метода
  72.         так бОльшее количество тестовых ситуаций можно проверить
  73.  
  74.         что до имени параметра sublect
  75.         даже если поправить на subject - будет не совсем точно)
  76.         проверка у нас не такая точная
  77.         мы не subject проверяем, а сто некий текст входит в текст заголовка письма
  78.  
  79.         получим - что нам тут подошла бы такая сигнатура метода
  80.         public static void assertMail(int index, String text)
  81.            
  82.         ну или что-то похожее) - возможно, ты придумаешь вариант получше
  83.     */
  84.  
  85.     public static void refreshMailPage() {
  86.         $(".gb_xb").click();
  87.     }
  88. /*
  89.     см прошлое ревью, строки 56-58
  90. */
  91. *************************************************************
  92.  
  93. /*
  94.     с прошлой версии решения - ушел метод findMail(String subject)
  95.     как он был реализован у тебя - смотри строки 46-51
  96.  
  97.     помимо старых комментариев - стоит уточнить имя и параметр
  98.  
  99.     мы можем искать, используя строку поиска subject: ....
  100.     тогда это будет поиск именно по subject
  101.     иначе - это поиск по некому тексту письма
  102.  
  103.     потому - или уточни реализацию и оставь имя параметра как сейчас
  104.     или измени имя параметра - выше приводила более нейтральный вариант
  105.  
  106.     что до имени метода - ниже приведу вариант - который позволит и имена методов чуть сократить
  107. */
  108. }
  109. *****************************************************
  110. public class GmailTest{
  111.  
  112.     {
  113.         Configuration.timeout = 15000;
  114.     }
  115.     /*
  116.         Лучше такое делать или в BeforeClass-методе, или в static initialization block -
  117.         чтобы даже при наличии нескольких тест-методов - этот код выполнялся ежиножды до запуска всех тестов
  118.        
  119.         instance initialization block - будет вызываться перед каждым тестом
  120.         (как если бы ты это разместила в конструкторе тест-класса или в Before-методе)
  121.         в это сложно поверить, но очень легко проверить - вставь в этот блок System.out.println(...)
  122.         реализуй пару тест-методов и запусти на выполнение все тест-методы класса
  123.         строчка выведется столько раз - сколько тест-методов будет запущено
  124.     */
  125.  
  126.     @Before
  127.     public void loginPassword(){
  128.         open("https://www.gmail.com");
  129.         signIn(logIn, password);
  130.     }
  131.     /*
  132.         Я бы на данном этапе - не выносила этот код в Before-метод
  133.         мы уже позаботились о том, чтобы были инструменты, которые можно переиспользовать - есть пейдж
  134.        
  135.         и пока нам ничего не известно о будущих тест-методах
  136.         потому - торопиться не надо и что-то выносить куда-то раньше времени - предполагая -
  137.         что именно эта часть будет нужна, как начало второго тест-метода
  138.  
  139.         одно дело - пейджа на будущее реализовать = инструменты
  140.         другое дело - застолбить - тест-методы начинаем так-то
  141.        
  142.         думаю - второе - излишне)
  143.         есть такой тезис - premature optimization is evil, погугли)
  144.     */
  145.  
  146.     @Test
  147.     public void SendLetterTest() {
  148. /*
  149.  
  150.     В тест-методе надо было сделать не только это)
  151.     посмотри задание
  152.  
  153.     имя тест-метода - начни с test
  154.     и перечисли - что мы тут тестим
  155.     в данном случае - это реально) - чтобы имя оставалось читаемым
  156.    
  157.         посмотри на такой вариант использования нескольких пейджей
  158.         тут идея с несколькими пейджами - несколько за уши притянута
  159.         но зато можно на малых формах посмотреть - как это и что дает в использовании
  160.         за счет вызова с указанием имени класса мейджа-модуля - можно имена методов полаконичнее делать
  161.  
  162.         выбери те идеи, что понравились
  163.         обрати внимание на имена методов и пейджей и на саму последовательность действий
  164.         поскольку указываем имя класса педжа-модуля - именуем методы с учетом этого - лаконичнее
  165.        
  166.             Gmail.visit();
  167.             Gmail.login(TestData.email, TestData.password);
  168.      
  169.             Mails.send(TestData.email, subject);
  170.      
  171.             Menu.openInbox();
  172.             Mails.assertMail(0, subject);    
  173.             Menu.openSent();
  174.             Mails.assertMail(0, subject);
  175.      
  176.             Mails.searchBySubject(subject);
  177.             Mails.assertMails(subject);
  178.  
  179. */
Advertisement
Add Comment
Please, Sign In to add comment