Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class TodoMVCTest {
- @Test
- public void testCreateTask(){
- /*
- мы в этом тест-методе - тестируем не только добавление тасок в список
- но и другие действия
- имя тест-метода должно отражать точно - что тест-метод делает
- правда, в случае с е2е тестами мы можем получить длинное плохо читаемое имя
- для этого применяют такой прием
- https://docs.google.com/document/d/10qSwWTQ6pGfVZSwOes-1QSmdflMiGD2U_y53VHq2m20/edit#bookmark=id.txqig9rkgybo
- советую весь раздел по naming почитать )
- */
- // Configuration.browser = "chrome";
- // $("#new-todo").shouldBe(Condition.enabled);
- /*
- предлагаю не нужный сейчас код - просто удалить, а не держать закомментированным
- далее на курсе рассмотрим - где и как грамотнее менять настройки
- пока это тут точно не нужно
- */
- open("https://todomvc4tasj.herokuapp.com/");
- // 1-4. Task creation
- $("#new-todo").setValue("task1").pressEnter();
- $("#new-todo").setValue("task2").pressEnter();
- $("#new-todo").setValue("task3").pressEnter();
- $("#new-todo").setValue("task4").pressEnter();
- $$("#todo-list li").shouldHave(size(4));
- /*
- проверки размера списка - недостаточно
- ведь могли добавиться 4 таски, но не в том порядке
- или не с такими, как надо, текстами
- есть кондишен для проверки коллекций
- exactTexts
- он проверяет
- количество элементов списка равно количеству переданных текстов
- текст элемента списка равен соответствующему переданному тексту (т е
- текст первого элемента = первому тексту, второго - второму и т д)
- т е - кондишен exactTexts - проверит количество, порядок и сами тексты
- уточни проверку
- */
- // 5. delete task2
- // $(By.cssSelector("#todo-list li:nth-of-type(2) .view .destroy")).hover().click();
- // $(By.xpath("//*[@id='todo-list']/li[2]/div/button")).click();
- /*
- обрати внимание - сначала в ручном режиме
- кнопка .destroy не видима у задачи изначально
- и только когда ты наводишь курсор мыши на саму таску - она становится видимой
- кликнуть на не видимом - невозможно
- т е - надо сначала позаботиться, чтоб кнопка .destroy у нужной нам таски стала видимой
- для этого надо для таски - вызвать метод hover()
- и уже потом - кликать на кнопке
- сравни css selectors
- #todo-list li:nth-of-type(2) .view .destroy
- #todo-list li:nth-of-type(2) .destroy
- оба - находят кнопку .destroy
- но второй вариант - полаконичнее (что важно - без потери точности)
- часть #todo-list li - сокращать не стоит
- пусть все селекторы для элементов, которые находятся внутри списка тасок #todo-list li
- именно так и начинаются - вот это не стоит сокращать
- уже сейчас это позволит понимать - что работаем с тем же списком #todo-list li
- а дальше - мы этот код преобразуем, будет совсем ок)
- xpath - в этом задании не нужен
- пока - достаточно возможностей css selector -ов
- к нужному элементу списка доступайся - как ты и делаешь - через :nth-of-type(...)
- в дальшейшем и это улучшим
- пока цель - освоиться немного - и с css selector - ами в том числе
- важный момент
- тесты - это не только действия
- то, что действие выполнилось - это хорошо
- но - нужно еще - чтобы его результаты нас устраивали
- потому - нужны проверки после каждого действия теста
- причем проверять нужно не только состояние таски, с которой мы работали
- а состояние всего списка тасок
- ведь могут быть проблемы такого рода - работали с одной таской, а состояние других тасок в списке
- изменилось, причем не верно
- в некоторых случаях можно отложить действие
- как мы это сделали после добавления 4-ех тасок
- мы там могли себе это позволить - т к все 4 действия были однородны
- и даже если проверка после добавления 4 тасок не прошла бы -
- то мы все равно точно знали бы - что у нас проблема с добавлением таски
- про проверки далее не пишу
- это касается всего кода
- */
- // 6. mark task4 as completed
- $(By.xpath(".//*[@id='todo-list']/li[3]/div/input")).click();
- /*
- используй и тут css selector
- здесь и далее
- */
- Element not found {By.id: #clear-completed}
- Expected: visible
- // 7. clear completed
- $(By.id("#clear-completed")).shouldBe(Condition.visible).click();
- /*
- By.id("#clear-completed") = локатор для элемента с ид = #clear-completed
- "#clear-completed" - cssSelector для єлемента с ид = clear-completed
- вопрос - так какой ид у кнопки?
- )
- не нужно перед вызовом click() вызывать shouldBe(Condition.visible)
- т к в Selenide - click() реализован уже со ждущей проверкой
- сам Selenide будет при необходимости ждать видимости этого элемента
- (конечно, в рамках таймаута, он по умолчанию = 4 секундам)
- используй import static для Condition.visible
- и тогда в коде сможешь писать visible
- касается и других кондишенов
- */
- ...
- /*
- далее - можно подправить по уже написанным комментариям)
- */
Advertisement
Add Comment
Please, Sign In to add comment