Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public void testTasksCommonFlow() {
- open("https://todomvc4tasj.herokuapp.com/");
- add("2");
- edit("2", "22");
- /*
- да, edit("2" - проверит add("2")
- т к это единственная таска в списке
- еще момент
- при использовании edit("2", "2 edited");
- будет легче потом понимать - что с таской было
- а вот проверки после edit("2" - нет...
- */
- switchToActiveFilter();
- /*
- тоже проверки нет...
- давай проанализируем
- был список с тасками = "22"
- перешли на Active фильтр
- стал список с тасками = "22"
- да, это для логики Active - верно
- но, мы можем пропустить ошибку - если вообще при переходе на фильтр список тасок не фильтруется
- (список каким был до, таким остался и после)
- а чтоб переход на фильтр проверить точно
- то нам нужно - чтобы состояние списка тасок изменился
- например
- на all-е - есть в списке закомпличеная таска
- перешли на active
- в списке - тасок нет
- сразу проверили точно - и фильтеринг, и закомпличивание на all, и логику = что на all-е отобразаются все таски
- */
- add("4", "5", "6");
- /*
- к одной видимой таске - добавили еще 3
- итого = 4 видимых таски
- операция toggle("4") - не проверит состояние всех этих тасок
- потому - тут не получится использовать неявную проверку
- */
- toggle("4");
- assertTasks("22", "5", "6");
- switchtoCompletedFilter();
- cancelEdit("4", "44");
- toggle("4");
- /*
- перед toggle("4") - хорошо сделать комментарий //reopen
- чтобы было понятнее - что за действие
- */
- assertNoTasks();
- switchToAllFilter();
- /*
- а вот тут нужна проверка
- т к на этот момент - 4 таски
- delete("22") - не проверит состояние списка с 4-мя тасками
- */
- delete("22");
- assertTasks("4", "5", "6");
- toggleAll();
- clearCompleted();
- /*
- если toggleAll() и clearCompleted() покрывать на других фильтрах
- то можно проверить результаты действий точнее )
- давай считать
- all
- add (1 штука)
- edit
- delete
- complete all
- clear completed
- active
- add (3 штуки)
- complete
- completed
- cancel edit
- reopen
- реально - перенести edit на active (разгрузим all)
- реально - перенести complete all выше по коду (до перехода на active фильтр (точнее проверим фильтеринг и complete all )
- реально - перенести clear completed на completed фильтр (точнее clear completed проверим)
- реально - обойтись добавлением одной таски на all-е и одной - на active фильтре (ты работал с 4-мя тасками, на момент последней операции - было 3 таски,
- а достаточно было - лишь одной. Вывод = двух тасок было бы достаточно на весь е2е)
- */
- assertNoTasks();
- }
- *********************************************
- ElementsCollection filters = $$("#filters>li");
- private void switchToAllFilter() {
- filters.findBy(text("All")).click();
- }
- private void switchToActiveFilter() {
- filters.findBy(text("Active")).click();
- }
- private void switchtoCompletedFilter() {
- filters.findBy(text("Completed")).click();
- }
- /*
- Выводы про реализацию этих методов - верно сделал )
- можно было вместо
- filters.findBy(text("..."))
- использовать
- $(By.linkText("..."))
- и тогда код будет чуть лаконичнее и не пригодится переменая filters
- */
- ***********************************
- private void edit(String oldtaskName, String taskNewName) {
- tasks.findBy(text(oldtaskName)).doubleClick();
- tasks.findBy(cssClass("editing")).$(".edit").setValue(taskNewName).pressEnter();
- }
- private void cancelEdit(String oldtaskName, String taskNewName) {
- tasks.findBy(text(oldtaskName)).doubleClick();
- tasks.findBy(cssClass("editing")).$(".edit").setValue(taskNewName).pressEscape();
- }
- /*
- посмотри на эти методы - много кода повторяется
- чтобы сделать код более DRY
- реализуй метод xxx(....)
- который будет выполнять эти действия
- и возвращать SelenideElement = элемент для ввода нового текста таски
- и ты сможешь писать код
- xxx("a", "a edited").pressEnter()
- или
- xxx("b", "b edit cancelled").pressEscape()
- реализовывать ли методы edit и cancelEdit - решать тебе
- чуть позже на курсе будет момент - когда будет понятно
- для чего такие методы было бы полезно реализовать
- сейчас - решай сама
- подумай над именем метода
- это старт/начало редактирования
- */
- ***********************
- private void assertTasks(String... taskNames) {
- tasks.filterBy(visible).shouldHave(exactTexts(taskNames));
- }
- private void assertNoTasks() {
- tasks.filterBy(visible).shouldBe(empty);
- }
- /*
- все ок реализовал
- есть еще один подход - с более точными проверками
- но за это придется платить более внимательным отношением к выбору проверок
- я бы осталась при твоей точке зрения )
- посмотри вот это видео
- https://drive.google.com/file/d/0B8hgIBw8-V-AdGxxU1R3enl1RzQ/view?usp=sharing
- */
Advertisement
Add Comment
Please, Sign In to add comment