julia_v_iluhina

Untitled

Dec 21st, 2016
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 11.10 KB | None | 0 0
  1. http://joxi.ru/eAO7pYktx45aWA
  2.  
  3. /*
  4.     Правильно - в имя тест-класса не включать структурную информацию
  5.     Номер версии - это именно структурная информация
  6.  
  7.     Это лучше отражать - на уровне пекеджей
  8.     И тогда при меновании классов - можно руководствоваться только правилами нейминга для тест-классов
  9.  
  10.     У нас они описаны в faq
  11.     https://docs.google.com/document/d/10qSwWTQ6pGfVZSwOes-1QSmdflMiGD2U_y53VHq2m20/edit#heading=h.ddb6ral2cluo
  12.  
  13.     Т к все тест-классы версий 1, 2 и 3 - занимаются одним и тем же - не стоит давать им разные имена
  14.  
  15.     Имя тест-метода - тоже стоит пересмотреть. В faq - есть и об этом
  16.     https://docs.google.com/document/d/10qSwWTQ6pGfVZSwOes-1QSmdflMiGD2U_y53VHq2m20/edit#bookmark=id.txqig9rkgybo
  17.  
  18.     Посмотри на разницу в именах, почитай раздел по неймингу
  19.     Если останутся вопросы - задай
  20. */
  21. ***********************
  22.  
  23.         open("https://todomvc4tasj.herokuapp.com");
  24.         /*
  25.             используй пропуски строк - как разделители кода на блоки
  26.             каждый блок = скоя мысльцель/задача
  27.             вот тут - стоит пропустить строку
  28.         */
  29.         $("#new-todo").setValue("task1").pressEnter();//1 create task1
  30.         $("#new-todo").setValue("task2").pressEnter();//create task2
  31.         $("#new-todo").setValue("task3").pressEnter();//create task3
  32.         $("#new-todo").setValue("task4").pressEnter();//create task4
  33.         /*
  34.             старайся не злоупотреблять комментариями
  35.             уже сейчас - можно было бы лишь раз - вначале этого блока - написать комментарий
  36.             //create
  37.             а далее - по коду будет понятно - что за таски добавляются
  38.  
  39.             также учти - что еще на уровне имени тест-метода мы сказали - что работаем с тасками
  40.             так что можно не повторяться
  41.  
  42.             такая экономия на комментариях -
  43.             во-первых, код сделает лаконичнее и проще
  44.             во-вторых - меньше комментариев тебе нужно поддерживать в актуальном состоянии при изменениях кода
  45.             это важно
  46.             вообще нужно стремиться писать код так - чтобы комментарии не понадобились, или были нужны крайне редко
  47.             но пока - в этой версии - они нужны
  48.             по крайней мере, мы можем это делать как можно более лаконично, конечно, без ущерба понятности)
  49.  
  50.             не забывай - каждая операция должна быть проверена сразу
  51.             тест - это не только автоматизированные шаги
  52.             это еще и их проверки
  53.             и общее правило такое - каждый шаг должен быть проверен сразу
  54.             да, из правила есть исключения - иногда можно отложить проверку на несколько шагов
  55.             но и в этом случае - не должно быть потери точности
  56.  
  57.             например, тут - мы можем себе позволить проверить состояние списка тасок после добавления аж 4-ой таски
  58.             т е по сути - отложить проверку на несколько шагов
  59.             причина проста
  60.             даже если тест упадет на этой проверке - мы все равно будем знать - что у нас проблема именно с добавлением тасок
  61.             т е - точности  мы не потеряли
  62.             и по результату выполнения теста - мы можем быстро и точно сказать - с какой операцией - есть проблемы
  63.  
  64.             также учти - что даже если операция касается лишь одной таски
  65.             проверка должна касаться всего списка тасок
  66.             т к могла быть такая ошибка - работаем с одной таской, а испоортилось состояние других тасок в списке
  67.  
  68.             эти советы - примени ко всему коду
  69.         */
  70.  
  71.         //Variant 2:
  72.         $("#todo-list").shouldHave(text("Task2")).$(By.cssSelector(".destroy")).shouldBe(visible).click();
  73. // но ничего не получается, такая ошибка : Element should be visible {.destroy}
  74.       //  Element: '<button class="destroy" type="submit" displayed:false></button>'
  75.         /*
  76.             мне кажется, ты не все соведы из faq видел )
  77.             все эти советы - http://joxi.ru/krDOZldFE0bW8A - касаются удаления таски
  78.  
  79.             просмотри их все
  80.  
  81.             $("#todo-list") - это элемент-контейнер списка тасок
  82.             http://joxi.ru/1A5zNxjunKXEKr
  83.  
  84.             а тебе нужна - коллекция тасок
  85.             нужно уточнить селектор #todo-list до внутренних элементов списка тасок
  86.             http://joxi.ru/1A5zNxjunKXOKr
  87.             верно, грамотно - оттолкуться от #todo-list
  88.             но тебе ведь нужен не контейнер списка, а его элементы
  89.             селектор должен быть таким, по которому будут находиться элементЫ списка тасок
  90.             http://www.w3schools.com/cssref/css_selectors.asp
  91.  
  92.             $(...) - находит ОДИН элемент (если по селектору находится несколько элементов - то это будет первый найденный)
  93.             $$(...) - находит КОЛЛЕКЦИЮ элементов
  94.             там нужна именно коллекция
  95.  
  96.             $$(...).shouldHave(...) - это проверка
  97.             что коллекция удовлетворяет такому-то кондишену
  98.  
  99.             у нас задача - получить из коллекции - таску по ее тексту (вообще-то  - это задача-максимум, и ее можно для первой версии - упростить)
  100.             чтобы из коллекции получить элемент по его тексту - нужно воспользоваться методом find
  101.             $$(...).find(exactText("someText"))
  102.             таким образом мы можем получить элемент коллекции $$(...), с текстом точно совпадающим с "someText"
  103.  
  104.             можно пока - для первой версии  - поступить проще
  105.             написать такой селектор - который позволит нам получить доступ к такой-то таске в списке (можно по ее порядковому номеру)
  106.             и тогда - обратишься к таске - как к элементу $(....)
  107.  
  108.             кнопка  .destroy - действительно, изначально не видна
  109.             и ждать ее видимости - бесполезно
  110.  
  111.             посмотри - что нам нужно сделать, чтобы кнопка стала видимой
  112.             нам нужно навести курсор мыши на нужную таску
  113.             чтоб навести курсор мыши - нужно для элемента-таски вызвать метод hover()
  114.             и уже после этого - обращаться к кнопке .destroy и вызывать метод .click()
  115.  
  116.             перед .click() - не нужно выполнять проверку shouldBe(visible)
  117.             Selenide самостоятельно заботится о таких ожиданиях
  118.             если нам нужно провзаимодействовать с элементом(кликнуть, навести курсор мыши, даблкликнуть, ввести значение, ...)
  119.             то Selenide самостоятельно дождется видимости элемента и затем будет выполнено действие
  120.             ожидание видимости будет происходить в рамках таймаута. По умолчанию от 4 секунді и для тестов todoMVC - этого вполне достаточно
  121.             другое дело - если элемент не видим и не становится видим. Тогда просто ждать - бесполезно
  122.             в нашем случае - нам для видимости кнопки .destroy - нужно навести курсор мыши на таску
  123.  
  124.             .....$(By.cssSelector(".destroy")) и ......$(".destroy") - технически равноценные варианты
  125.             я бы предпочла второй как более лаконичный
  126.         */
  127.  
  128.  
  129.         $("#todo-list").shouldHave(text("task4")).$(By.className("toggle")).click();//mark task4 as completed
  130.         $("#clear-completed").click();//clear completed
  131.         /*
  132.             не верю, что при таком коде - закомплитится именно таск 4 )
  133.             посмотри внимательно)
  134.         */
  135.  
  136.         $("#toggle-all").click();//mark all as completed
  137.         $("#clear-completed").click();//clear completed
  138.         $("#todo-list").shouldHave(empty);
  139.         /*
  140.             учти все комментарии выше - для всего кода
  141.            
  142.             проверяй - не состояние элемента - контейнера списка $("#todo-list")
  143.             а состояние коллекции - тасок в списке
  144.         */
Advertisement
Add Comment
Please, Sign In to add comment