Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <dependencies>
- <dependency>
- <groupId>com.codeborne</groupId>
- <artifactId>selenide</artifactId>
- <version>2.20</version>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.12</version>
- </dependency>
- </dependencies>
- /*
- Да, можно использовать и такую (уже достаточно старую) версию Selenide
- и как следствие - использовать и браузер более низкой версии.
- А лучше - использовать более новый Selenide )
- Рабочая комбинация - Selenide 3.10 + Firefox 47.0.1
- Как можно определиться с версиями
- Посмотреть сюда - какие версии Selenide уже доступны - http://ru.selenide.org/blog.html
- Обычно в описании изменений - можно увидеть и эту информацию -
- какая версия Selenium используется и с какой версией Firefox можно работать.
- Если этого не описано для последней версии, то значит - этот момент не изменился по сравнению с
- предыдущими версиями. Можно почитать описания предыдущих версий.
- Возможно, будет быстрее - посмотреть на более техническое описание
- https://github.com/codeborne/selenide/blob/master/CHANGELOG
- Можно найти упоминания о FireFox и/или Selenium и таким образом сориентироваться по версиям браузера
- (упомянутая версия - точно подходит, возможно - также подойдет и версия повыше, но не факт)
- Еще важный момент - настройка FireFox об автоматическом обновлении до последней версии. Она может мешать )
- */
- ******************************
- public class TodoMVCTest {
- @Test
- public void testCreateTask() {
- /*
- если бы мы тестировали только создание таски - да, имя для тест-метода
- подходило бы
- а мы тестируем - несколько действий)
- если их все перечислить в имени метода - получится длинновато
- это тоже плохо влияет на наглядность
- в таких случаях - пригодится вот такой прием - называть тест-метод
- например вот так - testTasksLifeCycle/ testTasksCommonFlow
- */
- open("https://todomvc4tasj.herokuapp.com/");
- /*
- используй пропуски строк для того, чтобы код сделать более наглядным
- раздели код на блоки
- вот тут стоит пропустить строку
- */
- $("#new-todo").setValue("task1").pressEnter();
- $("#new-todo").setValue("task2").pressEnter();
- $("#new-todo").setValue("task3").pressEnter();
- $("#new-todo").setValue("task4").pressEnter();
- /*
- недостаточно того, что действие выполнилось
- нужно еще - чтобы оно выполнилось с нужным нам результатом
- потому - результаты действий - нужно проверять
- и откладывать проверки на потом - не верно
- каждое действие должно быть проверено
- и проверено сразу
- чтобы можно было утверждать - что именно это действие выполнено верно
- иногда можно проверку отложить
- в данном случае - можно выполнить проверку уже после добавления четвертой таски
- т к до этого - выполнялось одно и то же действие
- мы не потеряем в точности, если проверим после добавления четвертой таски
- что проверять
- проверять нужно не только состояние таски, над которой действие произведено
- нужно проверить состояние всего списка тасок
- т к - мы может и поработали с одной таской
- а это повлияло на состояние и других тасок в списке
- чтоб отсечь такие проблемы - нужно проверять состояние всего списка тасок
- */
- //delete taksk2
- $("#todo-list li:nth-of-type(2)").hover();
- $("#todo-list li:nth-of-type(2) .destroy").hover().click();
- /*
- верно, сначала нам нужно выполнить hover() на таске
- чтобы кнопка удаления тасок стала видимой
- но вот уже для кнопки - hover() - не нужно выполнять
- на кнопке достаточно кликнуть - вызвать click()
- */
- $$("#todo-list li").shouldHave(exactTexts("task1", "task3", "task4"));
- /*
- хорошая проверка состояния всего списка
- аналогичную проверку стоило применить и после создания тасок
- кстати, и тут было бы вполне ок - пропустить строку
- как и после блока - создали таски+проверили
- применяй и дальше такой способ сделать код чуть нагляднее
- */
- //marked task4 as complete
- $("#todo-list li:nth-of-type(3) .toggle").hover().click();
- $("#filters>li>a").hover().click();
- $("#clear-completed").click();
- $$("#todo-list li").shouldHave(exactTexts("task1", "task3"));
- /*
- вот еще один блок)
- для чекбокса .toggle - не нужно выполнять hover()
- будет достаточно клика
- по следующей строке - $("#filters>li>a").hover().click();
- это не требовалось по заданию - это первое, почему не нужно этого делать)
- дальше - для общего развития
- второе - посмотри на http://joxi.ru/E2pdR1lFBR9lM2
- по такому селектору - есть 3 элемента
- в твоем варианте кода - будем работать с первым найденным элементов
- т е - кликнем на All
- смысла в этом не много)
- даже если бы нам было нужно перейти на какой-то другой фильтр
- то лучше подобрать локатор поточнее и понагляднее -
- так, чтобы находился четко нужный тебе элемент
- причем - чтобы и из кода было ясно - что за элемент нам был нужен
- ну для клика на элементе - hover() не нужно делать
- по проверке - вот тут тоже - пример удачный
- почему можно отложить проверку на 1 шаг (как ты и сделала)
- и проверить состояние списка не сразу после закомпличивания таски
- а уже после нажатия на clear completed
- если мы проверим после закомпличивания тексты тасок в списке
- мы конечно проверим тот факт - что на all фильтре все таски отображаются -
- вне зависимости от статуса
- но то, что таска была закомпличена, мы проверим уже после нажатия на clear completed
- а раз вот эта проверка будет самой точной - то вот ее и стоит оставить
- на самом деле - можно оставить проверку и после закомпличивания)
- например, чтобы отсечь такого рода проблемы - что после закомпличивания
- таска удалилась
- тут уже надо в зависимости от еще каких-то факторов решение принимать)
- */
- $("#toggle-all").hover().click();
- $("#clear-completed").click();
- $("#todo-list li").shouldNotBe();
- /*
- а вот тут в проверке - мы не сказали - чего не должно быть)
- т е - считай - ничего не проверили)
- а нужно проверить - что список тасок пуст (или его размер = 0)
- технически - это одно и то же
- вот тут почитай
- http://selenide.org/documentation.html
- раздел com.codeborne.selenide.ElementsCollection
- */
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment