julia_v_iluhina

Untitled

Dec 5th, 2016
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.72 KB | None | 0 0
  1. public class TodoMvcTest {
  2.  
  3.     @Test
  4.     public void todoAddRemoveMarkTest(){
  5.     /*
  6.         Что мы тут покрываем
  7.         add
  8.         delete
  9.         complete
  10.         clear completed
  11.         complete all
  12.  
  13.         если это все перечислить в имени - вряд ли оно будет нормально читаться
  14.         т е - пользы - немного
  15.  
  16.         перечислить не все, а лишь кое-что - тоже практика не очень
  17.         имя теста должно отражать полностью - что он делает
  18.         можно не детализироваться до описания каждого действия
  19.         но вот так выборочно скрывать из имени что-то  - тоже не дело
  20.         в таких случаях - когда все перечислить в имени - не лаконично
  21.         можно применять фразы типа LifeCycle, CommonFlow ...
  22.  
  23.         и по conventions - имя класса нужно начинать с test (или - можно опустить test)
  24.  
  25.         см раздел faq по неймингу
  26.         там все эти моменты описаны подробно
  27.         https://docs.google.com/document/d/10qSwWTQ6pGfVZSwOes-1QSmdflMiGD2U_y53VHq2m20/edit#
  28.  
  29.         тут - будет ок - testTasksLifeCycle, testTasksCommonFlow
  30.         что-то в таком духе
  31.     */
  32.  
  33. //        System.setProperty("webdriver.chrome.driver","E:\\Projects\\chromedriver.exe");
  34. //        Configuration.browser = "chrome";
  35. /*
  36.     смело убирай это из кода
  37.     тут это тебе не пригодится
  38.  
  39.     если продолжишь учиться - информация будет прибывать с большой скоростью
  40.     и в ревью
  41.     и в материалах курса
  42.  
  43.     мой тебе совет - в том же гугл-доке
  44.     делать документ, в котором структурировать всякие полезные советы
  45.     (используй заголовки разных уровней + оглавление - получишь удобный для навигации материал)
  46.  
  47.     и код не будет перегружен лишними сведениями
  48.     и у тебя будет один источник знаний = найти будет что-либо значительно проще
  49. */
  50.  
  51.         open("https://todomvc4tasj.herokuapp.com");
  52.  
  53.         /* $("#new-todo").waitUntil(appears, 1000);  appears не распознается ??? Заменил на shouldBe(visible) но все равно непорядок */
  54.         $("#new-todo").shouldBe(visible);
  55.         /*
  56.             в чем непорядок проявляется?
  57.             на самом деле - если мы для элемента $(...) вызываем метод, подразумевающий некое взаимодействие с элементом
  58.             click / doubleClick / hover / clear/ sendKeys / setValue/ ....
  59.             то Selenide - самостоятельно дожидается видимости этого элемента
  60.             и лишь потом производит действие над элементом
  61.  
  62.             потому - такая проверка - не нужна
  63.  
  64.             в хроме - ты мог увидеть проблемы при добавлении тасок
  65.             но и там не помогло бы ожидание $("#new-todo").shouldBe(visible);
  66.             об этом мы поговорим позже, на курсе
  67.  
  68.             сейчас - тестируя в файрфоксе - все ок должно быть
  69.             просто при использовании - $("#new-todo").setValue(...).pressEnter();
  70.  
  71.             не торопись)
  72.             всему свое время
  73.         */
  74.         $("#new-todo").setValue("task1").pressEnter();
  75.         $$("#todo-list li").shouldHave(exactTexts("task1"));
  76.  
  77.         $("#new-todo").setValue("task2").pressEnter();
  78.         $$("#todo-list li").shouldHave(exactTexts("task1", "task2"));
  79.  
  80.         $("#new-todo").setValue("task3").pressEnter();
  81.         $$("#todo-list li").shouldHave(exactTexts("task1", "task2", "task3"));
  82.  
  83.         $("#new-todo").setValue("task4").pressEnter();
  84.         // $$("#todo-list li").shouldHave(size(4));
  85.         $$("#todo-list li").shouldHave(exactTexts("task1", "task2", "task3", "task4"));
  86.         /*
  87.             верно, size - проверять уже не нужно (а значит - и комментарий не нужен)
  88.             exactTexts - проверит и количество, и порядок, и сами тексты
  89.  
  90.             в данном случае - можно было первую проверку делать после добавления всех 4-х тасок
  91.             тут мы можем отложить проверку
  92.             все просто - даже если первая провекра после добавления всех 4-х тасок не пройдет - мы будем знать -
  93.             что проблема - с операцией добавления тасок
  94.  
  95.             а раз точности мы не потеряли - так можно чуть сэкономить )
  96.             и первую проверку сделать аж после добавления 4-х тасок
  97.         */
  98.  
  99.         $("#todo-list>li:nth-child(2)").hover().$(".destroy").shouldBe(visible).click();
  100.         /*
  101.             согласна -  #todo-list>li - более точный селектор для списка тасок
  102.             но ты в других местах - применяешь селектор #todo-list li, который для нашего несложного приложения -
  103.             тоже вполне идентифицирует коллекцию элементов
  104.  
  105.             лучше - для одной сущности - использовать один вариант селектора
  106.             из этих 2-ух я бы предпочла #todo-list>li (как более точный)
  107.  
  108.             выбрав один из вариантов - уже во всем тесте - если строишь селектор для чего-то из списка тасок -
  109.             используй только его
  110.  
  111.             уже на этом этапе - код станет проще
  112.             и однозначнее
  113.             а далее - мы от этого побольше бонусов получим
  114.  
  115.             как писала выше - нам не нужно выполнять shouldBe(visible) перед click()
  116.             click() - перед выполнением этого действия и так будет выполнено ожидание видимости элемента
  117.         */
  118.         $$("#todo-list li").shouldHave(exactTexts("task1","task3","task4"));
  119.  
  120.         $("#todo-list>li[class='active']:nth-child(3) input").click();
  121.         /*
  122.             а вот тут - почему-то в селекторе появилось много такого, чего нам не нужно
  123.  
  124.             сравни
  125.             для идентификации таски 2 - "#todo-list>li:nth-child(2)"
  126.             для идентификации таски 3 - "#todo-list>li[class='active']:nth-child(3)"
  127.  
  128.             вопрос - что такого полезного нам дает уточнение в селекторе [class='active']?
  129.             что мы этим хотим уточнить/показать/проверить/подчеркнуть?
  130.  
  131.             селектор - это, фактически, маска
  132.             по которой мы находим элемент/коллекцию элементов
  133.             и она должда быть
  134.                 1 - точной (чтоб мы находили все что нужно и ничего кроме этого)
  135.                 2 - наглядной (чтоб мы использовали тот вариант маски - который сам поясняет наш код
  136.                 (например - как ты использовал для кнопки удаления - не  button, а .destroy")
  137.                 2 - лаконичной (если какая-то часть селектора ничего из выше перечисленных функций не выполняет - то лучше ее из селектора выкинуть)
  138.  
  139.             в данном случае -   [class='active'] - это та не существенная часть, которую стоит убрать из селектора
  140.  
  141.             и вместо input для чекбокса можно найти селектор понагляднее
  142.             что делает чекбокс = переключает статус
  143.             посмотри на другие атрибуты этого элемента
  144.         */
  145.         $("#todo-list>li[class='completed']:nth-child(3)");\
  146.         /*
  147.            читаем код
  148.            получить коллекцию тасок со статусом completed и в ней - найти третий элемент
  149.  
  150.            мы расписали - как найти некий элемент
  151.  
  152.            но - мы ничего далее не сделали
  153.            не проверили его состояние
  154.            и никак не взаимодействовали с ним
  155.            считай - что мы лишь описали, как нам доступиться до некого элемента в коллекции тасок
  156.  
  157.            вопрос - какие были наши цели ?
  158.  
  159.            я писала в http://pastebin.com/fpH5rhNc строки 192 - 209
  160.            особенно - строки 199-201
  161.  
  162.            еще раз перечитай задание
  163.            https://docs.google.com/document/d/1yvUML7eXyEyDh5asUIL7M88RStlE1RZmgUOJZSXjMVo/edit
  164.            оно не реализовано до конца
  165.  
  166.            реализуй весь тест согласно задания
  167.            в коде должны быть все описанные в задании шаги и их проверки - в последовательности, описанной в задании
  168.            
  169.         */
  170.  
  171.     }
  172.  
  173. }
Advertisement
Add Comment
Please, Sign In to add comment