julia_v_iluhina

Untitled

Jul 24th, 2016
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.66 KB | None | 0 0
  1. public void testTasksCommonFlow() {
  2.         open("https://todomvc4tasj.herokuapp.com/");
  3.  
  4.         add("2");
  5.         edit("2", "22");
  6.         /*
  7.             да, edit("2" - проверит add("2")
  8.             т к это единственная таска в списке
  9.            
  10.             еще момент
  11.             при использовании edit("2", "2 edited");
  12.             будет легче потом понимать - что с таской было
  13.            
  14.             а вот проверки после edit("2" - нет...
  15.         */
  16.  
  17.         switchToActiveFilter();
  18.         /*
  19.             тоже проверки нет...
  20.            
  21.             давай проанализируем
  22.            
  23.             был список с тасками = "22"
  24.             перешли на Active фильтр
  25.             стал список с тасками = "22"
  26.            
  27.             да, это для логики Active - верно
  28.             но, мы можем пропустить ошибку - если вообще при переходе на фильтр список тасок не фильтруется
  29.             (список каким был до, таким остался и после)
  30.            
  31.             а чтоб переход на фильтр проверить точно
  32.             то нам нужно - чтобы состояние списка тасок изменился
  33.            
  34.             например
  35.             на all-е - есть в списке закомпличеная таска
  36.             перешли на active
  37.             в списке - тасок нет
  38.            
  39.             сразу проверили точно - и фильтеринг, и закомпличивание на all, и логику = что на all-е отобразаются все таски
  40.         */
  41.        
  42.         add("4", "5", "6");
  43.         /*
  44.             к одной видимой таске - добавили еще 3
  45.             итого = 4 видимых таски
  46.            
  47.             операция toggle("4") - не проверит состояние всех этих тасок
  48.            
  49.             потому - тут не получится использовать неявную проверку
  50.         */
  51.         toggle("4");
  52.         assertTasks("22", "5", "6");
  53.  
  54.         switchtoCompletedFilter();
  55.        
  56.         cancelEdit("4", "44");
  57.         toggle("4");
  58.         /*
  59.             перед toggle("4") - хорошо сделать комментарий //reopen
  60.             чтобы было понятнее - что за действие
  61.         */
  62.         assertNoTasks();
  63.  
  64.         switchToAllFilter();
  65.         /*
  66.             а вот тут нужна проверка
  67.             т к на этот момент - 4 таски
  68.            
  69.             delete("22") - не проверит состояние списка с 4-мя тасками
  70.         */
  71.        
  72.         delete("22");
  73.         assertTasks("4", "5", "6");
  74.         toggleAll();
  75.         clearCompleted();
  76.         /*
  77.             если toggleAll() и clearCompleted() покрывать на других фильтрах
  78.             то можно проверить результаты действий точнее )
  79.            
  80.            
  81.             давай считать
  82.            
  83.             all
  84.                 add (1 штука)
  85.                 edit
  86.                 delete
  87.                 complete all
  88.                 clear completed
  89.             active
  90.                 add (3 штуки)
  91.                 complete
  92.             completed    
  93.                 cancel edit
  94.                 reopen
  95.                
  96.            
  97.             реально - перенести edit на active (разгрузим all)
  98.             реально - перенести complete all выше по коду (до перехода на active фильтр (точнее проверим фильтеринг и complete all )
  99.             реально - перенести clear completed  на completed фильтр (точнее clear completed проверим)
  100.             реально - обойтись добавлением одной таски на all-е и одной - на active фильтре (ты работал с 4-мя тасками, на момент последней операции - было 3 таски,
  101.             а достаточно было - лишь одной. Вывод = двух тасок было бы достаточно на весь е2е)
  102.                
  103.         */
  104.         assertNoTasks();
  105.     }
  106. *********************************************
  107.  
  108.     ElementsCollection filters = $$("#filters>li");
  109.  
  110.     private void switchToAllFilter() {
  111.         filters.findBy(text("All")).click();
  112.     }
  113.  
  114.     private void switchToActiveFilter() {
  115.         filters.findBy(text("Active")).click();
  116.     }
  117.  
  118.     private void switchtoCompletedFilter() {
  119.         filters.findBy(text("Completed")).click();
  120.     }
  121. /*
  122.     Выводы про реализацию этих методов - верно сделал )
  123.    
  124.     можно было вместо
  125.         filters.findBy(text("..."))
  126.     использовать
  127.         $(By.linkText("..."))
  128.        
  129.     и тогда код будет чуть лаконичнее и не пригодится переменая filters    
  130. */
  131. ***********************************
  132.  
  133.     private void edit(String oldtaskName, String taskNewName) {
  134.         tasks.findBy(text(oldtaskName)).doubleClick();
  135.         tasks.findBy(cssClass("editing")).$(".edit").setValue(taskNewName).pressEnter();
  136.     }
  137.  
  138.     private void cancelEdit(String oldtaskName, String taskNewName) {
  139.         tasks.findBy(text(oldtaskName)).doubleClick();
  140.         tasks.findBy(cssClass("editing")).$(".edit").setValue(taskNewName).pressEscape();
  141.     }
  142. /*
  143.     посмотри на эти методы - много кода повторяется
  144.    
  145.     чтобы сделать код более DRY
  146.       реализуй метод xxx(....)
  147.       который будет выполнять эти действия
  148.       и возвращать SelenideElement = элемент для ввода нового текста таски
  149.      
  150.       и ты сможешь писать код
  151.       xxx("a", "a edited").pressEnter()
  152.       или
  153.       xxx("b", "b edit cancelled").pressEscape()
  154.      
  155.       реализовывать ли методы edit и cancelEdit - решать тебе
  156.       чуть позже на курсе будет момент - когда будет понятно
  157.       для чего такие методы было бы полезно реализовать
  158.       сейчас - решай сама
  159.      
  160.       подумай над именем метода
  161.       это старт/начало редактирования
  162. */
  163. ***********************
  164.     private void assertTasks(String... taskNames) {
  165.         tasks.filterBy(visible).shouldHave(exactTexts(taskNames));
  166.     }
  167.  
  168.     private void assertNoTasks() {
  169.         tasks.filterBy(visible).shouldBe(empty);
  170.     }
  171. /*
  172.     все ок реализовал
  173.    
  174.     есть еще один подход - с более точными проверками
  175.     но за это придется платить более внимательным отношением к выбору проверок
  176.     я бы осталась при твоей точке зрения )
  177.    
  178.     посмотри вот это видео
  179.     https://drive.google.com/file/d/0B8hgIBw8-V-AdGxxU1R3enl1RzQ/view?usp=sharing
  180. */
Advertisement
Add Comment
Please, Sign In to add comment