Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class TodoMvcTest {
- @Test
- public void todoAddRemoveMarkTest(){
- /*
- Что мы тут покрываем
- add
- delete
- complete
- clear completed
- complete all
- если это все перечислить в имени - вряд ли оно будет нормально читаться
- т е - пользы - немного
- перечислить не все, а лишь кое-что - тоже практика не очень
- имя теста должно отражать полностью - что он делает
- можно не детализироваться до описания каждого действия
- но вот так выборочно скрывать из имени что-то - тоже не дело
- в таких случаях - когда все перечислить в имени - не лаконично
- можно применять фразы типа LifeCycle, CommonFlow ...
- и по conventions - имя класса нужно начинать с test (или - можно опустить test)
- см раздел faq по неймингу
- там все эти моменты описаны подробно
- https://docs.google.com/document/d/10qSwWTQ6pGfVZSwOes-1QSmdflMiGD2U_y53VHq2m20/edit#
- тут - будет ок - testTasksLifeCycle, testTasksCommonFlow
- что-то в таком духе
- */
- // System.setProperty("webdriver.chrome.driver","E:\\Projects\\chromedriver.exe");
- // Configuration.browser = "chrome";
- /*
- смело убирай это из кода
- тут это тебе не пригодится
- если продолжишь учиться - информация будет прибывать с большой скоростью
- и в ревью
- и в материалах курса
- мой тебе совет - в том же гугл-доке
- делать документ, в котором структурировать всякие полезные советы
- (используй заголовки разных уровней + оглавление - получишь удобный для навигации материал)
- и код не будет перегружен лишними сведениями
- и у тебя будет один источник знаний = найти будет что-либо значительно проще
- */
- open("https://todomvc4tasj.herokuapp.com");
- /* $("#new-todo").waitUntil(appears, 1000); appears не распознается ??? Заменил на shouldBe(visible) но все равно непорядок */
- $("#new-todo").shouldBe(visible);
- /*
- в чем непорядок проявляется?
- на самом деле - если мы для элемента $(...) вызываем метод, подразумевающий некое взаимодействие с элементом
- click / doubleClick / hover / clear/ sendKeys / setValue/ ....
- то Selenide - самостоятельно дожидается видимости этого элемента
- и лишь потом производит действие над элементом
- потому - такая проверка - не нужна
- в хроме - ты мог увидеть проблемы при добавлении тасок
- но и там не помогло бы ожидание $("#new-todo").shouldBe(visible);
- об этом мы поговорим позже, на курсе
- сейчас - тестируя в файрфоксе - все ок должно быть
- просто при использовании - $("#new-todo").setValue(...).pressEnter();
- не торопись)
- всему свое время
- */
- $("#new-todo").setValue("task1").pressEnter();
- $$("#todo-list li").shouldHave(exactTexts("task1"));
- $("#new-todo").setValue("task2").pressEnter();
- $$("#todo-list li").shouldHave(exactTexts("task1", "task2"));
- $("#new-todo").setValue("task3").pressEnter();
- $$("#todo-list li").shouldHave(exactTexts("task1", "task2", "task3"));
- $("#new-todo").setValue("task4").pressEnter();
- // $$("#todo-list li").shouldHave(size(4));
- $$("#todo-list li").shouldHave(exactTexts("task1", "task2", "task3", "task4"));
- /*
- верно, size - проверять уже не нужно (а значит - и комментарий не нужен)
- exactTexts - проверит и количество, и порядок, и сами тексты
- в данном случае - можно было первую проверку делать после добавления всех 4-х тасок
- тут мы можем отложить проверку
- все просто - даже если первая провекра после добавления всех 4-х тасок не пройдет - мы будем знать -
- что проблема - с операцией добавления тасок
- а раз точности мы не потеряли - так можно чуть сэкономить )
- и первую проверку сделать аж после добавления 4-х тасок
- */
- $("#todo-list>li:nth-child(2)").hover().$(".destroy").shouldBe(visible).click();
- /*
- согласна - #todo-list>li - более точный селектор для списка тасок
- но ты в других местах - применяешь селектор #todo-list li, который для нашего несложного приложения -
- тоже вполне идентифицирует коллекцию элементов
- лучше - для одной сущности - использовать один вариант селектора
- из этих 2-ух я бы предпочла #todo-list>li (как более точный)
- выбрав один из вариантов - уже во всем тесте - если строишь селектор для чего-то из списка тасок -
- используй только его
- уже на этом этапе - код станет проще
- и однозначнее
- а далее - мы от этого побольше бонусов получим
- как писала выше - нам не нужно выполнять shouldBe(visible) перед click()
- click() - перед выполнением этого действия и так будет выполнено ожидание видимости элемента
- */
- $$("#todo-list li").shouldHave(exactTexts("task1","task3","task4"));
- $("#todo-list>li[class='active']:nth-child(3) input").click();
- /*
- а вот тут - почему-то в селекторе появилось много такого, чего нам не нужно
- сравни
- для идентификации таски 2 - "#todo-list>li:nth-child(2)"
- для идентификации таски 3 - "#todo-list>li[class='active']:nth-child(3)"
- вопрос - что такого полезного нам дает уточнение в селекторе [class='active']?
- что мы этим хотим уточнить/показать/проверить/подчеркнуть?
- селектор - это, фактически, маска
- по которой мы находим элемент/коллекцию элементов
- и она должда быть
- 1 - точной (чтоб мы находили все что нужно и ничего кроме этого)
- 2 - наглядной (чтоб мы использовали тот вариант маски - который сам поясняет наш код
- (например - как ты использовал для кнопки удаления - не button, а .destroy")
- 2 - лаконичной (если какая-то часть селектора ничего из выше перечисленных функций не выполняет - то лучше ее из селектора выкинуть)
- в данном случае - [class='active'] - это та не существенная часть, которую стоит убрать из селектора
- и вместо input для чекбокса можно найти селектор понагляднее
- что делает чекбокс = переключает статус
- посмотри на другие атрибуты этого элемента
- */
- $("#todo-list>li[class='completed']:nth-child(3)");\
- /*
- читаем код
- получить коллекцию тасок со статусом completed и в ней - найти третий элемент
- мы расписали - как найти некий элемент
- но - мы ничего далее не сделали
- не проверили его состояние
- и никак не взаимодействовали с ним
- считай - что мы лишь описали, как нам доступиться до некого элемента в коллекции тасок
- вопрос - какие были наши цели ?
- я писала в http://pastebin.com/fpH5rhNc строки 192 - 209
- особенно - строки 199-201
- еще раз перечитай задание
- https://docs.google.com/document/d/1yvUML7eXyEyDh5asUIL7M88RStlE1RZmgUOJZSXjMVo/edit
- оно не реализовано до конца
- реализуй весь тест согласно задания
- в коде должны быть все описанные в задании шаги и их проверки - в последовательности, описанной в задании
- */
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment