Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class FirstTest {
- @Test
- public void testSomething(){
- /*
- для имен тест-классов и тест-методов - существуют свои правила и conventions
- conventions - выдержаны)
- но есть еще и правила
- имя тест-класса - должно в общем описывать - что же мы тестируем
- TodoMvcTest - будет OK
- имя тест-метода - должно еще более уточнять это
- и повторяться с именем тест-класса - уже не нужно
- Если бы тестировали одно-два действия - можно было бы перечислить это в имени тест-метода
- А так - лучше использовать фразы типа LifeCycle, CommonFlow ...
- testTasksLifeCycle - как вариант
- в faq - есть большой раздел по неймингу
- https://docs.google.com/document/d/10qSwWTQ6pGfVZSwOes-1QSmdflMiGD2U_y53VHq2m20/edit#
- */
- open("https://todomvc4tasj.herokuapp.com");
- /*
- используй пропуски строк - как разделители между блоками кода
- каждый блок несет какую-то законченную мысль, решает какую-то конкретную задачу
- пот после open - я бы пропустила строку)
- */
- $(By.cssSelector("#new-todo")).append("The first task").pressEnter();
- $(By.cssSelector("#new-todo")).append("The second task").pressEnter();
- $(By.cssSelector("#new-todo")).append("The third task").pressEnter();
- $(By.cssSelector("#new-todo")).append("The forth task").pressEnter();
- $$(By.cssSelector("#todo-list li")).shouldHaveSize(4);
- /*
- и вот это - тоже блок - добавление тасок + проверка
- что до добавления тасок - советую использовать более лаконичные варианты для тестовых данных
- task1, task2, ...
- a, b, c
- так код станет лаконичнее, и как следствие - его будет проще писать и легче читать
- что до возражений - а как же - мы же не оттестировали использование текстов тасок из нескольктх слов
- то это надо тестить не на уровне Web UI Automation
- а на уровне unit тестов
- на уровне Web UI Automation - сосредосточимся на функциональных проверках
- именно такой подход является наиболее эффективным
- по проверке
- то, что провреяешь состояние все коллекции элементов "#todo-list li" - это верно
- но - недостаточно точно
- что будет - если таски добавятся в нужном количестве, но не с теми текстами, или не в той последовательности?
- ведь это - тоже ошибки
- достаточно проверки shouldHave(exactTexts(....))
- как осуществяется проверка по кондишену exactTexts
- сверяется количество, порядок и тексты
- количество элементов коллекции должно быть равно количеству переданных текстов
- иначе - проверка не прошла
- и далее - по порядку сверяются текст элемента и переданный текст
- нулевой - с нулевым
- первый с первым
- и т д
- таким образом - уже не нужно проверять размер списка
- раз уже проверили exactTexts
- еще момент
- можно код сделать чуть лаконичнее
- варианты
- $(By.cssSelector("#new-todo"))
- и
- $("#new-todo")
- $$(By.cssSelector("#todo-list li"))
- и
- $$("#todo-list li")
- технически - равноценны
- использовать ли метод append или setValue - тоже надо подумать)
- была бы спецификация приложения - я бы руководстовалась ею при выборе варианта
- append - просто тодавляет текста в элемент
- setValue - очищает поле, и добавляет текста
- в нашем случае - оба варианта ок - т к после нажатия на Enter - поле для добавления таски очищается
- */
- $$(By.cssSelector("#todo-list li")).get(1).hover().findElementByCssSelector(".destroy").click();
- /*
- удаление таски + проверка после действия = еще один блок кода
- проверки пока нет
- нам нужно было реализовать ТЕСТ на базе сценария
- а ТЕСТ в принципе - включает шаги плюс проверки
- тест - это не только нужные действия
- это еще и проверки результатов действий
- и правильнее - не откладывать проверки
- а делать их сразу после действий
- т к именно это позволит нам понять - что конкретно работает не так как нужно
- и как писала выше - проверки должны касаться не только таски, с которой мы непосредственно работали
- а всех тасок в списке
- ведь ошибка может проявляться и так - после работы с одной таской - состояние другой(или других) тасок тоже как-то портиться
- есть причины и/или цели
- по которым мы можем отложить проверку на несколько шагов
- вот, например выше - мы выполнили проверку после добавления всех 4-ех тасок
- даже если тест упал бы на той проверке - мы бы могли быстро понять - с чем у нас проблема - с добавлением тасок
- т е - точности мы не потеряли, проверив состояние списка тасок аж после добавления 4-ой таски
- пока - принимая решение - делать ли проверку или ее отложить - руководствуйся вот такими соображениями
- но в целом правило такое - проверки нужно делать сразу
- после удаления таски - нужна проверка
- вместо .findElementByCssSelector(".destroy")
- можно использовать .$(".destroy")
- или .find(".destroy")
- технически - это одно и то же
- */
- $$(By.cssSelector("#todo-list li")).get(2).findElementByCssSelector(".toggle").click();
- $(By.cssSelector("#clear-completed")).click();
- /*
- вот - еще один блок кода
- см выше - текст про то, как можно сделать код полаконичнее
- и про проверки тоже)
- */
- $(By.cssSelector("#toggle-all")).click();
- $(By.cssSelector("#clear-completed")).click();
- /*
- и еще один блок кода
- то же самое - про лаконичность и проверки
- */
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment