julia_v_iluhina

Untitled

Nov 24th, 2016
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.33 KB | None | 0 0
  1. public class GoogleMailPage {
  2. /*
  3.     Судя по реализации - это пейдж-модуль
  4.     а почему имя класса у пейджа - как для пейджа-объекта?
  5.  
  6.     Посмотри на комментарии к работе  по пейлдам-модулям и тут это поправь
  7. */
  8.     static SelenideElement composeButton = $(byText("COMPOSE"));
  9.     /*
  10.         Нам эта кнопка нужна только для того, чтоб реализовать sendMail
  11.         значит - можно обойтись без такой переменой
  12.     */
  13.  
  14.     public static void mailLogin(String email, String passwd){
  15. /*
  16.     passwd - избегай сокращений
  17.     общепринятые употреблять - это ок
  18.     тут корректнее - password
  19. */
  20.  
  21.     public static void assertComposeButton() {
  22. /*
  23.     а для чего нам такой метод?
  24.     особенно с учетом того - как мы нашли эту кнопку)
  25.     мы ее нашли по такому-то тексту
  26.     и проверили ей текст)
  27.  
  28.     на самом деле - если тест без этой проверки у тебя не работал - это значит тебе не хватило таймаута
  29.  
  30.     в условии задания
  31.     Gmail loads pretty long time… You can increase selenide timeouts used in “shoulds”
  32.     E.g.: Configuration.timeout = 15000;
  33.  
  34.     мне с моим аккаунтом понадобилось больше - 20-25 секунд
  35.  
  36.     ведь мы в sendMail - начинаем с клика на этой кнопке
  37.     клик по элементу в Selenide - ждет видимости элемента
  38.     в рамках таймаута
  39.  
  40.     так что - увеличь таймаут - и будет ок без assertComposeButton()
  41.  
  42.     сейчас assertComposeButton() - выполняет функцию дополнительных тормозоа
  43.     таймаутом это регулировать грамотнее
  44. */
  45.  
  46.     public static void sendMail(String emailAddress, String emailSubject){
  47. /*
  48.     Имена параметров смотри
  49.     выше в методе mailLogin - был email
  50.     а тут - в похожем контексте - приняем уже emailAddress
  51.  
  52.     и нужна ли приставка email - в именах параметров метода sendMail?
  53.  
  54.     мы ж не говорим - кошка махала кошкиным хвостом
  55.     кошка махала хвостом)
  56.     это и в прошлой работе у тебя было
  57.  
  58.     обращай внимание на такие мелочи)
  59. */
  60.     public static void refresh() {
  61.         $(byXpath("//div[2]/div[1]/div/div[1]/div[1]/div/div/div[4]/div")).click();
  62.     }
  63. /*
  64.     дикий локатор)))
  65.     старайся обходиться без xpath
  66.  
  67.     http://joxi.ru/82QYoQyI1PpoM2 - это подсказка
  68.  
  69.     приведу про xpath - ниже
  70. */
  71.  
  72.     public  static void assertInInbox(String emailSubject){
  73.         $(byText(emailSubject));
  74.     }
  75. /*
  76.     Мы в списке мейлов - проверки делаем не раз
  77.     одна проверка - самое верхнее письмо в списке - содержит такой-то текст
  78.     вторая проверка - в списке лишь одно письмо и его тексто содержит такой-то текст
  79.     вывод - тебе нужно найти слектор для коллекции мейлов
  80.     нужно - чтобы по этому селектору - а в inbox, и в sent, и в search режиме -
  81.     мы всегда получали нужное количество верных элементов
  82.         http://joxi.ru/v29WjP9hG7GRNr
  83.         http://joxi.ru/Vrwqg81HKZKjw2
  84. */
  85.  
  86.     public static void assertInSent(String emailSubject) {
  87.         $(byTitle("Sent Mail")).click();
  88.         $(byName("me "));
  89.         $(byText(emailSubject));
  90.         /*
  91.             читай - как называется метод)
  92.  
  93.             а что мы делаем
  94.             мы делаем не проверку
  95.             мы переходим в Sent
  96.             это - действие
  97.  
  98.             и его прятать в методе-проверке - вредно
  99.             не надо скрывать тестовую логику = прятать в методе-проверке действия
  100.             или в методе-действии - проверку
  101.  
  102.             мы делали это единожды - когда в clearCompleted()
  103.             после клика на кнопке проверили - что кнопка скрылась
  104.             мы так позволили себе реализовать потому что
  105.                 с точки зрения тестовой логики - это была не важная проверка
  106.                 и сделав такую проверку по пути - мы малой кровью улучшили покрытие
  107.  
  108.             иногда в методах-действиях ждущие проверки выполняют роль умных ожиданий - что действие можно выполнить
  109.  
  110.             но тут - другая история
  111.             нам нужно выполнить действие
  112.             и нужно проверить его результат
  113.             и оба этих момента - нужно отразить в тест-методе
  114.  
  115.             вторая и следующая операция - не являются проверками
  116.             мы просто получили объекты типа SelenideElement - и ничего с ними не делали, никак не проверяли
  117.  
  118.             напоминаю - в проверках оперируй списком мейлов
  119.         */
  120.     }
  121.  
  122.     public static void searchAndAssert(String emailSubject) {
  123.         $(byName("q")).setValue(emailSubject).pressEnter();
  124.         $$(byText(emailSubject)).filter(visible).shouldHave(size(1));
  125.     }
  126.     /*
  127.         то же касается и этого метода
  128.         не объединяй действие и проверку в одном степе
  129.  
  130.         и оперируй списком мейлов
  131.         проверить размер списка - недостаточно)
  132.         нужно - чтобы в списке был один элемент, и его текст должен содержать такой-то текст
  133.         вспомни - как ты в тестах todoMVC - проверял и тексты тасок, и их количество - с помощью одной проверки
  134.         есть аналогичный кондишен, который точно также проверит порядок, количество и тексты элементов
  135.         но тексты - не на равенство, а на вхождение
  136.     */
  137. }
  138.  
  139. /*
  140.     Еще важный момент
  141.     запусти тест дважды
  142.     второй раз - тест не пройдет
  143.     т к будет уже 2 мейла с такой темой
  144.    
  145.     выход - для каждого запуска теста - генерировать уникальный subject и им оперировать
  146.     это можно сделать разными способами
  147.     в том числе - добавить к тексту дату-время в миллисекундах
  148.    
  149. */
  150.  
  151. **************************************
  152. /*
  153.     Про использование xPath
  154.     css Selector-ов - почти всегда достаточно
  155.     Тут - xPath-ы тебе точно не понадобятся
  156.  
  157.     Привожу тебе наш диалог с другим студентом)
  158.  
  159.         Почему грамотнее предпочитать cssSelectors xpath-выражениям
  160.  
  161.         student: а маска может быть написана через xpath?
  162.         Julia Iluhina: может
  163.         Julia Iluhina: но лучше используй цсс селектор - если есть такая возможность
  164.  
  165.         Julia Iluhina: http://stackoverflow.com/questions/16788310/what-is-the-difference-between-css-selector-xpath-which-is-betteraccording-t
  166.         Julia Iluhina: http://elementalselenium.com/tips/32-xpath-vs-css
  167.         Julia Iluhina: Некоторые вещи невозможно сделать без xpath
  168.         Julia Iluhina: там конечно он пригодится)
  169.         ...
  170.         Iakiv Kramarenko: а если по делу - то икспасы ЗЛО, потому что громоздкие и плохо поддерживаемые
  171.         и их стоит использовать очень редко, только когда цсс-ов не хватает
  172.  
  173.         единственное место где тебе нужны будут знания икспасов - это интервью
  174.         потому что большинство автоматизаторов - плохие автоматизаторы) и почему то думают что икспасы это круто :)
  175.  
  176.         так вот… когда нужно будет пройти интервью - тогда и выучишь икспасы - а сейчас нечего дурным голову забивать
  177.         Iakiv Kramarenko: On 7/26/16, at 3:27 PM, student wrote:
  178.         > Может для икспаса другой синтаксис
  179.  
  180.         у икспаса конечно другой синтаксис
  181.  
  182.         и если ты хочешь найти элемент по икспасу нужно явно передавать в долар икспас
  183.         так
  184.         $(By.xpath(…))
  185.         либо так
  186.         $(byXpath(…))
  187.  
  188.         вот здесь я пишу об этом более подробно:
  189.         http://automated-testing.info/t/pomogite-razobratsya-s-problemoj-czikla-v-selenide/10467/8
  190. */
Advertisement
Add Comment
Please, Sign In to add comment