Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- http://joxi.ru/eAO7pYktx45aWA
- /*
- Правильно - в имя тест-класса не включать структурную информацию
- Номер версии - это именно структурная информация
- Это лучше отражать - на уровне пекеджей
- И тогда при меновании классов - можно руководствоваться только правилами нейминга для тест-классов
- У нас они описаны в faq
- https://docs.google.com/document/d/10qSwWTQ6pGfVZSwOes-1QSmdflMiGD2U_y53VHq2m20/edit#heading=h.ddb6ral2cluo
- Т к все тест-классы версий 1, 2 и 3 - занимаются одним и тем же - не стоит давать им разные имена
- Имя тест-метода - тоже стоит пересмотреть. В faq - есть и об этом
- https://docs.google.com/document/d/10qSwWTQ6pGfVZSwOes-1QSmdflMiGD2U_y53VHq2m20/edit#bookmark=id.txqig9rkgybo
- Посмотри на разницу в именах, почитай раздел по неймингу
- Если останутся вопросы - задай
- */
- ***********************
- open("https://todomvc4tasj.herokuapp.com");
- /*
- используй пропуски строк - как разделители кода на блоки
- каждый блок = скоя мысльцель/задача
- вот тут - стоит пропустить строку
- */
- $("#new-todo").setValue("task1").pressEnter();//1 create task1
- $("#new-todo").setValue("task2").pressEnter();//create task2
- $("#new-todo").setValue("task3").pressEnter();//create task3
- $("#new-todo").setValue("task4").pressEnter();//create task4
- /*
- старайся не злоупотреблять комментариями
- уже сейчас - можно было бы лишь раз - вначале этого блока - написать комментарий
- //create
- а далее - по коду будет понятно - что за таски добавляются
- также учти - что еще на уровне имени тест-метода мы сказали - что работаем с тасками
- так что можно не повторяться
- такая экономия на комментариях -
- во-первых, код сделает лаконичнее и проще
- во-вторых - меньше комментариев тебе нужно поддерживать в актуальном состоянии при изменениях кода
- это важно
- вообще нужно стремиться писать код так - чтобы комментарии не понадобились, или были нужны крайне редко
- но пока - в этой версии - они нужны
- по крайней мере, мы можем это делать как можно более лаконично, конечно, без ущерба понятности)
- не забывай - каждая операция должна быть проверена сразу
- тест - это не только автоматизированные шаги
- это еще и их проверки
- и общее правило такое - каждый шаг должен быть проверен сразу
- да, из правила есть исключения - иногда можно отложить проверку на несколько шагов
- но и в этом случае - не должно быть потери точности
- например, тут - мы можем себе позволить проверить состояние списка тасок после добавления аж 4-ой таски
- т е по сути - отложить проверку на несколько шагов
- причина проста
- даже если тест упадет на этой проверке - мы все равно будем знать - что у нас проблема именно с добавлением тасок
- т е - точности мы не потеряли
- и по результату выполнения теста - мы можем быстро и точно сказать - с какой операцией - есть проблемы
- также учти - что даже если операция касается лишь одной таски
- проверка должна касаться всего списка тасок
- т к могла быть такая ошибка - работаем с одной таской, а испоортилось состояние других тасок в списке
- эти советы - примени ко всему коду
- */
- //Variant 2:
- $("#todo-list").shouldHave(text("Task2")).$(By.cssSelector(".destroy")).shouldBe(visible).click();
- // но ничего не получается, такая ошибка : Element should be visible {.destroy}
- // Element: '<button class="destroy" type="submit" displayed:false></button>'
- /*
- мне кажется, ты не все соведы из faq видел )
- все эти советы - http://joxi.ru/krDOZldFE0bW8A - касаются удаления таски
- просмотри их все
- $("#todo-list") - это элемент-контейнер списка тасок
- http://joxi.ru/1A5zNxjunKXEKr
- а тебе нужна - коллекция тасок
- нужно уточнить селектор #todo-list до внутренних элементов списка тасок
- http://joxi.ru/1A5zNxjunKXOKr
- верно, грамотно - оттолкуться от #todo-list
- но тебе ведь нужен не контейнер списка, а его элементы
- селектор должен быть таким, по которому будут находиться элементЫ списка тасок
- http://www.w3schools.com/cssref/css_selectors.asp
- $(...) - находит ОДИН элемент (если по селектору находится несколько элементов - то это будет первый найденный)
- $$(...) - находит КОЛЛЕКЦИЮ элементов
- там нужна именно коллекция
- $$(...).shouldHave(...) - это проверка
- что коллекция удовлетворяет такому-то кондишену
- у нас задача - получить из коллекции - таску по ее тексту (вообще-то - это задача-максимум, и ее можно для первой версии - упростить)
- чтобы из коллекции получить элемент по его тексту - нужно воспользоваться методом find
- $$(...).find(exactText("someText"))
- таким образом мы можем получить элемент коллекции $$(...), с текстом точно совпадающим с "someText"
- можно пока - для первой версии - поступить проще
- написать такой селектор - который позволит нам получить доступ к такой-то таске в списке (можно по ее порядковому номеру)
- и тогда - обратишься к таске - как к элементу $(....)
- кнопка .destroy - действительно, изначально не видна
- и ждать ее видимости - бесполезно
- посмотри - что нам нужно сделать, чтобы кнопка стала видимой
- нам нужно навести курсор мыши на нужную таску
- чтоб навести курсор мыши - нужно для элемента-таски вызвать метод hover()
- и уже после этого - обращаться к кнопке .destroy и вызывать метод .click()
- перед .click() - не нужно выполнять проверку shouldBe(visible)
- Selenide самостоятельно заботится о таких ожиданиях
- если нам нужно провзаимодействовать с элементом(кликнуть, навести курсор мыши, даблкликнуть, ввести значение, ...)
- то Selenide самостоятельно дождется видимости элемента и затем будет выполнено действие
- ожидание видимости будет происходить в рамках таймаута. По умолчанию от 4 секунді и для тестов todoMVC - этого вполне достаточно
- другое дело - если элемент не видим и не становится видим. Тогда просто ждать - бесполезно
- в нашем случае - нам для видимости кнопки .destroy - нужно навести курсор мыши на таску
- .....$(By.cssSelector(".destroy")) и ......$(".destroy") - технически равноценные варианты
- я бы предпочла второй как более лаконичный
- */
- $("#todo-list").shouldHave(text("task4")).$(By.className("toggle")).click();//mark task4 as completed
- $("#clear-completed").click();//clear completed
- /*
- не верю, что при таком коде - закомплитится именно таск 4 )
- посмотри внимательно)
- */
- $("#toggle-all").click();//mark all as completed
- $("#clear-completed").click();//clear completed
- $("#todo-list").shouldHave(empty);
- /*
- учти все комментарии выше - для всего кода
- проверяй - не состояние элемента - контейнера списка $("#todo-list")
- а состояние коллекции - тасок в списке
- */
Advertisement
Add Comment
Please, Sign In to add comment