julia_v_iluhina

Untitled

Dec 5th, 2016
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.55 KB | None | 0 0
  1. public class TodoMVCTest {
  2.  
  3.     @Test
  4.     public void testCreateTask()
  5.     /*
  6.         мы ведь в этом тест-методе - не только тестируем создание таски
  7.  
  8.         значит - имя тест-метода некорректно
  9.  
  10.         ознакомься с разделом faq по неймингу
  11.         и прими решение насчет имени тест-метода
  12.  
  13.         https://docs.google.com/document/d/10qSwWTQ6pGfVZSwOes-1QSmdflMiGD2U_y53VHq2m20/edit?usp=sharing
  14.  
  15.         обрати особое внимание на это
  16.         https://docs.google.com/document/d/10qSwWTQ6pGfVZSwOes-1QSmdflMiGD2U_y53VHq2m20/edit#bookmark=id.txqig9rkgybo
  17.  
  18.     */
  19.     {
  20.     /*
  21.         используй в работе - стандартное форматирование кода
  22.  
  23.         в IntelIJ Idea - выдели код + в меню - code->reformat code
  24.         обрати внимание - как сдвинется єта фигурная скобка
  25.  
  26.         стандартно отформатированный код - большинством специалистов воспринимается проще
  27.         стоит отрастить привычку форматировать код хотя бы перед тем, как выкладывать в репозиторий
  28.         да и вообще - это удобно)
  29.     */
  30.         open("https://todomvc4tasj.herokuapp.com/");
  31.         /*
  32.             ты уже неплохо используешь пропуски строк для разделения кода на блоки
  33.             и тут не помешал бы пропуск строки)
  34.         */
  35.         $("#new-todo").setValue("Task1").pressEnter();
  36.         $("#new-todo").setValue("Task2").pressEnter();
  37.         $("#new-todo").setValue("Task3").pressEnter();
  38.         $("#new-todo").setValue("Task4").pressEnter();
  39.  
  40.         $$("#todo-list li").shouldHave(size(4));
  41.         $$("#todo-list li").shouldHave(exactTexts("Task1","Task2", "Task3", "Task4"));
  42.         /*
  43.             тут - достаточно проверки exactTexts
  44.              как осуществяется проверка по кондишену exactTexts
  45.                         сверяется количество, порядок и тексты
  46.                             количество элементов коллекции должно быть равно количеству переданных текстов
  47.                             иначе - проверка не прошла
  48.                             и далее - по порядку сверяются текст элемента и переданный текст
  49.                             нулевой - с нулевым
  50.                             первый с первым
  51.                             и  т д
  52.                         таким образом - уже не нужно проверять размер списка
  53.                         раз уже проверили  exactTexts
  54.                        
  55.              про проверки - учти здесь и далее          
  56.         */
  57.  
  58.         $("#todo-list li:nth-of-type(2)").click();
  59.         /*
  60.             на самом деле - нам не нужно кликать на таске
  61.             достаточно навести на нее курсор мыши - и кнопка удаления станет видимой
  62.  
  63.             метод для наведения курсора мыши - hover()
  64.             это метод элемента (так же как и click())
  65.  
  66.         */
  67.         $("#todo-list li:nth-of-type(2) button.destroy").click(); //???
  68.         /*
  69.             комментарий с вопросами - не понятен)
  70.  
  71.             если не совсем ясно - почему именно так нужно реализовывать удаление таски - тоже загляни в faq - там есть раздел и про это
  72.  
  73.             из селектора можно без ущерба убрать button
  74.            
  75.             селектор - это, фактически, маска
  76.                         по которой мы находим элемент/коллекцию элементов
  77.                         и она должна быть
  78.                             1 - точной (чтоб мы находили все что нужно и ничего кроме этого)
  79.                             2 - наглядной (чтоб мы использовали тот вариант маски - который сам поясняет наш код
  80.                             2 - лаконичной (если какая-то часть селектора ничего из выше перечисленных функций не выполняет -
  81.                             то лучше ее из селектора выкинуть)
  82.         */
  83.  
  84.         $$("#todo-list li").shouldHave(size(3));
  85.         $$("#todo-list li").shouldHave(exactTexts("Task1", "Task3", "Task4"));
  86.         /*
  87.             и тут только exactTexts стоит оставить
  88.         */
  89.  
  90.         $("#todo-list li:nth-of-type(3) input.toggle").click();
  91.         /*
  92.             из описанных выше соображений - можно из селектора убрать input
  93.         */
  94.         $("#clear-completed").click();
  95.  
  96.         $$("#todo-list li").shouldHave(size(2));
  97.         $$("#todo-list li").shouldHave(exactTexts("Task1", "Task3"));
  98.        /*
  99.             и тут только exactTexts стоит оставить
  100.        */        
  101.  
  102.         $("#toggle-all").click();
  103.         $("#clear-completed").click();
  104.  
  105.         $$("#todo-list li").shouldHave(size(0));
  106.         /*
  107.             эту же проверку можно переписать как
  108.             $$("#todo-list li").shouldBe(empty);
  109.            
  110.             технически - одно и то же
  111.             но чуть нагляднее и лаконичнее
  112.         */
  113.     }
  114. }
  115.  
  116. ****************************************
  117. про xPath-ы
  118.  
  119. Икспасы - ЗЛО, потому что громоздкие, нечитабельные и потому плохо поддерживаемые.
  120. Их стоит использовать очень редко, только когда CSS-селекторов не хватает
  121.  
  122. единственное место где тебе нужны будут знания икспасов - это интервью, потому что большинство автоматизаторов - плохие автоматизаторы)
  123. и почему-то думают что икспасы это круто :)
  124.  
  125. так вот… когда нужно будет пройти интервью - тогда и выучишь икспасы - а сейчас нечего дурным голову забивать
  126.  
  127. вот здесь я критикую икспасы с аргументами: http://automated-testing.info/t/pomogite-razobratsya-s-problemoj-czikla-v-selenide/10467/8
  128.  
  129. реально в селениде можно почти всегда обходиться без икспасов.
  130.  
  131. Даже варианты типа:
  132.  
  133. `$(".element").find(byXpath("./following-sibling::*/input"));`
  134.  
  135. обычно можно переписать как:
  136. <
  137. `$(".element").find(byXpath("..//input"));`
  138. <
  139. `$(".element").find(byXpath("..")).find("input");`
  140. <
  141. `$(".element").parent().find("input")`
  142.  
  143. А скоро в селениде появится еще и полный аналог (https://github.com/codeborne/selenide/issues/429):
  144.  
  145. `$(".element").followingSibling().find("input")`
  146.  
  147. Бонусом при такой разбивке будет то, что в случае падения теста мы сможем более точно определить по сообщению об ошибке -
  148. где именно проблема в локаторе;)
  149.  
  150. А так например при падении на `.find(byXpath("./following-sibling::*/input"));`
  151. мы не сможем по ошибке определить
  152. - нет ли родного брата `./following-sibling::*`
  153. - или нет элемента `input`
  154.  
  155. Вот еще ссылок:
  156. http://stackoverflow.com/questions/16788310/what-is-the-difference-between-css-selector-xpath-which-is-betteraccording-t
  157. http://elementalselenium.com/tips/32-xpath-vs-css
Advertisement
Add Comment
Please, Sign In to add comment