Advertisement
julia_v_iluhina

Untitled

Jan 7th, 2017
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.80 KB | None | 0 0
  1. Easy setup
  2. https://docs.google.com/document/d/1fodHkTunrtit-EiMBrb91Mc6rbnQ5LwtBL9rISQveKA/edit?usp=sharing
  3.  
  4. FAQ
  5. https://docs.google.com/document/d/10qSwWTQ6pGfVZSwOes-1QSmdflMiGD2U_y53VHq2m20/edit?usp=sharing
  6.  
  7.  
  8. public class QACourseAutomationTest {
  9. /*
  10.     почитай раздел по naming - FAQ
  11.     и прими решение по поводу имени тест-класса
  12. */
  13.     @Rule
  14.     public ScreenShooter makeScreenShot = ScreenShooter.failedTests().succeededTests();
  15. /*
  16.     Selenide по умолчанию делает скриншоты при падении теста
  17.     а если тест прошел - польза от скриншота - сомнительная)
  18.  
  19.     смело убирай эту строчку
  20. */
  21.  
  22.     @Test
  23.     public void testCreateTask() {
  24.     /*
  25.         в этом тесте - мы проверяем не только создание тасок
  26.         но и другие операции
  27.  
  28.         подправь имя тест-метода
  29.         раздел по неймингу в faq - тоже должен помочь
  30.     */
  31.         Configuration.timeout = 4000;
  32.         /*
  33.             таймаут по умолчанию - и есть - 4 секунды)
  34.             тоже - смело убирай эту строку
  35.         */
  36.         open("http://todomvc.com/examples/troopjs_require/#/");
  37.         /*
  38.             Как Яков писал - если планируешь у нас учиться - лучше используй версию
  39.             https://todomvc4tasj.herokuapp.com/
  40.             но пока и так ОК
  41.         */
  42.  
  43.         //Start of creating tasks (1-4)
  44.         $(By.xpath("//input[@class='new-todo']")).setValue("task1").pressEnter();
  45.         $(By.xpath("//input[@class='new-todo']")).setValue("task2").pressEnter();
  46.         $(By.xpath("//input[@class='new-todo']")).setValue("task3").pressEnter();
  47.         $(By.xpath("//input[@class='new-todo']")).setValue("task4").pressEnter();
  48.         /*
  49.             в данном случае - использование xpath - неоправданно
  50.             на самом деле, xpath - редко нужен)
  51.             особенно - если речь о Selenide)
  52.  
  53.             используй css Selector
  54.             http://www.w3schools.com/cssref/css_selectors.asp
  55.  
  56.             тест - это не только нужные действия
  57.                        это еще и проверки результатов действий
  58.                        и правильнее - не откладывать проверки
  59.                        а делать их сразу после действий
  60.                        т к именно это позволит нам понять - что конкретно работает не так как нужно
  61.  
  62.                        важно - проверки должны касаться не только таски, с которой мы непосредственно работали
  63.                        а всех тасок в списке
  64.                        ведь ошибка может проявляться и так - после работы с одной таской - состояние другой(или других) тасок тоже как-то портиться
  65.  
  66.                        есть причины и/или цели
  67.                        по которым мы можем отложить проверку на несколько шагов
  68.                        вот, например выше - мы выполнили проверку после добавления всех 4-ех тасок
  69.                        даже если тест упал бы на той проверке - мы бы могли быстро понять - с чем у нас проблема - с добавлением тасок
  70.                        т е - точности мы не потеряли, проверив состояние списка тасок аж после добавления 4-ой таски
  71.                        пока - принимая решение - делать ли проверку или ее отложить - руководствуйся вот такими соображениями
  72.                        но в целом правило такое - проверки нужно делать сразу после выполненного действия
  73.         */
  74.  
  75.         //Check if list have four elements
  76.         $$(".todo-list li").shouldHave(CollectionCondition.size(4));
  77.         /*
  78.             это недостаточно сильная проверка
  79.             тасок может быть нужное количество
  80.             но они могут идти не в том порядке
  81.             или - у них могут быть искажены тексты
  82.  
  83.             нам достаточно проверки $$(...).shouldHave(exactTexts("task1", "task2", "task3", "task4"))
  84.             как осуществяется проверка по кондишену exactTexts
  85.             сверяется количество, порядок и тексты
  86.                 количество элементов коллекции должно быть равно количеству переданных текстов
  87.                 иначе - проверка не прошла
  88.                 и далее - по порядку сверяются текст элемента и переданный текст
  89.                 нулевой - с нулевым
  90.                 первый с первым
  91.                 и  т д
  92.             таким образом - уже не нужно проверять размер списка
  93.             раз уже проверили  exactTexts
  94.  
  95.         */
  96.  
  97.         //Deleting task 2 (5)
  98.         $(byText("task2")).hover().$(By.xpath("//li[2]/div/button")).shouldBe(Condition.visible).click();
  99.         /*
  100.             круто)
  101.             ты таску по ее тексту нашел)
  102.  
  103.             только - советую все же - оттолкнуться от коллекции тасок
  104.             $$(".todo-list li")
  105.  
  106.             найти элемент коллекции по его точному тексту =
  107.             $$(...).findBy(exactText(...))
  108.  
  109.             вариант $(byText("task2")) не так хорош - т к таким образом
  110.             мы получаем любой элемент страницы с таким именем
  111.  
  112.             а в варианте $$(...).findBy(exactText(...)) - мы более точны
  113.             мы говорим - что работаем со списком тасок
  114.             и у него - получаем элемент - так-то
  115.             т е - код - хоть и немного длиннее
  116.             но - гораздо точнее
  117.  
  118.             $(By.xpath("//li[2]/div/button")) - используй css Selector
  119.             и у кнопки - удаления - есть селектор и понагляднее
  120.             просмотри у этого элемента все свойства
  121.             выбери то, которое максимально точно характеризует - что это кнопка удаления
  122.  
  123.             .shouldBe(Condition.visible).click()
  124.             .shouldBe(Condition.visible) - не нужно выполнять
  125.             Selenide работает так
  126.             когда мы выполняем любое действие над элементом
  127.             ожидание его видимости - выполняется автоматически (в рамках таймаута)
  128.         */
  129.  
  130.         //Marking task 4 as completed (6)
  131.         $(By.xpath("//label[(text()='task4')]/preceding-sibling::input[@type='checkbox']")).click();
  132.         /*
  133.             выше - уже разобрали, как получить таску по ее тексту - $$(...).findBy(exactText(...))
  134.             и тут также - получи таску по ее тексту
  135.  
  136.             и далее - ее внутренний элемент-чекбокс - $$(...).findBy(exactText(...)).find("....")
  137.             его - ищи по css Selector
  138.             тоже - подбери понагляднее
  139.         */
  140.  
  141.         //Clearing completed (7)
  142.         $(By.xpath("//button[@class='clear-completed']")).shouldBe(Condition.visible).click();
  143.         /*
  144.             нужен css Selector
  145.  
  146.             старайся лишнего в css Selector не писать
  147.             по сути - css Selector - это маска по которой мы ищем элемент
  148.             нам нужно - чтоб она была точной, наглядной и лаконичной
  149.             лишнего в css Selector держать не стоит)
  150.  
  151.             про .shouldBe(Condition.visible) перед click() - писала
  152.         */
  153.  
  154.         //Mark all as completed (8)
  155.         $(By.xpath("//input[@type='checkbox']")).click();
  156.         /*
  157.             нужен наглядный css Selector
  158.         */
  159.         //Clear remaining completed tasks (9)
  160.         $(By.xpath("//button[@class='clear-completed']")).shouldBe(Condition.visible).click();
  161.         /*
  162.             нужен наглядный css Selector
  163.         */
  164. /*
  165.     постарайся комментарии - применить не только там, где он написан
  166.     но и для последующего кода
  167.    
  168.     про xpath вот это еще почитай - https://gist.github.com/yashaka/4810feb446e82c5566ba26a0996c1023
  169.    
  170. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement