julia_v_iluhina

Untitled

Oct 16th, 2016
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.41 KB | None | 0 0
  1. <dependencies>
  2.     <dependency>
  3.         <groupId>com.codeborne</groupId>
  4.         <artifactId>selenide</artifactId>
  5.         <version>2.20</version>
  6.     </dependency>
  7.     <dependency>
  8.         <groupId>junit</groupId>
  9.         <artifactId>junit</artifactId>
  10.         <version>4.12</version>
  11.     </dependency>
  12. </dependencies>
  13. /*
  14.     Да, можно использовать и такую (уже достаточно старую) версию Selenide
  15.     и как следствие - использовать и браузер более низкой версии.
  16.  
  17.     А лучше - использовать более новый Selenide )
  18.  
  19.     Рабочая комбинация  - Selenide 3.10 + Firefox 47.0.1
  20.  
  21.     Как можно определиться с версиями
  22.     Посмотреть сюда - какие версии Selenide уже доступны - http://ru.selenide.org/blog.html
  23.     Обычно в описании изменений - можно увидеть и эту информацию -
  24.     какая версия Selenium используется и с какой версией Firefox можно работать.
  25.     Если этого не описано для последней версии, то значит - этот момент не изменился по сравнению с
  26.     предыдущими версиями. Можно почитать описания предыдущих версий.
  27.  
  28.     Возможно, будет быстрее - посмотреть на более техническое описание
  29.     https://github.com/codeborne/selenide/blob/master/CHANGELOG
  30.     Можно найти упоминания о FireFox и/или Selenium и таким образом сориентироваться по версиям браузера
  31.     (упомянутая версия - точно подходит, возможно - также подойдет и версия повыше, но не факт)
  32.  
  33.     Еще важный момент - настройка FireFox об автоматическом обновлении до последней версии. Она может мешать )
  34. */
  35. ******************************
  36. public class TodoMVCTest {
  37.  
  38.     @Test
  39.     public void testCreateTask() {
  40.     /*
  41.         если бы мы тестировали только создание таски - да, имя для тест-метода
  42.         подходило бы
  43.  
  44.         а мы тестируем - несколько действий)
  45.  
  46.         если их все перечислить в имени метода - получится длинновато
  47.         это тоже плохо влияет на наглядность
  48.  
  49.         в таких случаях - пригодится вот такой прием - называть тест-метод
  50.         например вот так - testTasksLifeCycle/ testTasksCommonFlow
  51.     */
  52.         open("https://todomvc4tasj.herokuapp.com/");
  53.         /*
  54.             используй пропуски строк для того, чтобы код сделать более наглядным
  55.             раздели код на блоки
  56.             вот тут стоит пропустить строку
  57.         */
  58.         $("#new-todo").setValue("task1").pressEnter();
  59.         $("#new-todo").setValue("task2").pressEnter();
  60.         $("#new-todo").setValue("task3").pressEnter();
  61.         $("#new-todo").setValue("task4").pressEnter();
  62.         /*
  63.             недостаточно того, что действие выполнилось
  64.             нужно еще - чтобы оно выполнилось с нужным нам результатом
  65.             потому - результаты действий - нужно проверять
  66.             и откладывать проверки на потом - не верно
  67.  
  68.             каждое действие должно быть проверено
  69.             и проверено сразу
  70.             чтобы можно было утверждать - что именно это действие выполнено верно
  71.             иногда можно проверку отложить
  72.  
  73.             в данном случае - можно выполнить проверку уже после добавления четвертой таски
  74.             т к до этого - выполнялось одно и то же действие
  75.             мы не потеряем в точности, если проверим после добавления четвертой таски
  76.  
  77.             что проверять
  78.                 проверять нужно не только состояние таски, над которой действие произведено
  79.                 нужно проверить состояние всего списка тасок
  80.  
  81.                 т к - мы может и поработали с одной таской
  82.                 а это повлияло на состояние и других тасок в списке
  83.  
  84.                 чтоб отсечь такие проблемы - нужно проверять состояние всего списка тасок
  85.         */
  86.         //delete taksk2
  87.         $("#todo-list li:nth-of-type(2)").hover();
  88.         $("#todo-list li:nth-of-type(2) .destroy").hover().click();
  89.         /*
  90.             верно, сначала нам нужно выполнить hover() на таске
  91.             чтобы кнопка удаления тасок стала видимой
  92.  
  93.             но вот уже для кнопки - hover() - не нужно выполнять
  94.             на кнопке достаточно кликнуть - вызвать click()
  95.         */
  96.         $$("#todo-list li").shouldHave(exactTexts("task1", "task3", "task4"));
  97.         /*
  98.             хорошая проверка состояния всего списка
  99.             аналогичную проверку стоило применить и после создания тасок
  100.  
  101.             кстати, и тут было бы вполне ок - пропустить строку
  102.             как и после блока - создали таски+проверили
  103.             применяй и дальше такой способ сделать код чуть нагляднее
  104.         */
  105.         //marked task4 as complete
  106.         $("#todo-list li:nth-of-type(3) .toggle").hover().click();
  107.         $("#filters>li>a").hover().click();
  108.         $("#clear-completed").click();
  109.         $$("#todo-list li").shouldHave(exactTexts("task1", "task3"));
  110.         /*
  111.             вот еще один блок)
  112.  
  113.             для чекбокса .toggle - не нужно выполнять hover()
  114.             будет достаточно клика
  115.  
  116.             по следующей строке - $("#filters>li>a").hover().click();
  117.                 это не требовалось по заданию - это первое, почему не нужно этого делать)
  118.  
  119.                 дальше - для общего развития
  120.                     второе - посмотри на http://joxi.ru/E2pdR1lFBR9lM2
  121.                     по такому селектору - есть 3 элемента
  122.                     в твоем варианте кода - будем работать с первым найденным элементов
  123.                     т е - кликнем на All
  124.                     смысла в этом не много)
  125.  
  126.                     даже если бы нам было нужно перейти на какой-то другой фильтр
  127.                     то лучше подобрать локатор поточнее и понагляднее -
  128.                     так, чтобы находился четко нужный тебе элемент
  129.                     причем - чтобы и из кода было ясно - что за элемент нам был нужен
  130.  
  131.                     ну для клика на элементе - hover() не нужно делать
  132.  
  133.             по проверке - вот тут тоже - пример удачный
  134.             почему можно отложить проверку на 1 шаг (как ты и сделала)
  135.             и проверить состояние списка не сразу после закомпличивания таски
  136.             а уже после нажатия на clear completed
  137.  
  138.             если мы проверим после закомпличивания тексты тасок в списке
  139.             мы конечно проверим тот факт - что на all фильтре все таски отображаются -
  140.             вне зависимости от статуса
  141.             но то, что таска была закомпличена, мы проверим уже после нажатия на clear completed
  142.             а раз вот эта проверка будет самой точной - то вот ее и стоит оставить
  143.  
  144.             на самом деле - можно оставить проверку и после закомпличивания)
  145.             например, чтобы отсечь такого рода проблемы - что после закомпличивания
  146.             таска удалилась
  147.             тут уже надо в зависимости от еще каких-то факторов решение принимать)
  148.         */
  149.         $("#toggle-all").hover().click();
  150.         $("#clear-completed").click();
  151.         $("#todo-list li").shouldNotBe();
  152.         /*
  153.             а вот тут в проверке - мы не сказали - чего не должно быть)
  154.             т е - считай - ничего не проверили)
  155.  
  156.             а нужно проверить - что список тасок пуст (или его размер = 0)
  157.             технически - это одно и то же
  158.            
  159.             вот тут почитай
  160.             http://selenide.org/documentation.html
  161.             раздел com.codeborne.selenide.ElementsCollection
  162.         */
  163.     }
  164. }
Advertisement
Add Comment
Please, Sign In to add comment