julia_v_iluhina

Untitled

Aug 1st, 2016
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.74 KB | None | 0 0
  1. public class ToDoMVCEndToEnd {
  2. /*
  3.     Имя тест-класса - должно отвечать conventions - заканчиваться на Test
  4.  
  5.     EndToEnd -  это свойсвто не тест-класса, а тест-метода
  6.     к тому же - нам это знание мало что дает
  7.     фраза EndToEnd в имени - нам не опишет - что мы тестируем
  8.     а если мы смотрим на код метода - нам и так станет понятно - что это е2е
  9.     в общем - нету смысла в именах писать про е2е
  10.  
  11.     назвать тест-класс можно как и в прошлой работе - ToDoMVCTest
  12.     и расположить этот класс в другом пекедже относительно прошлой работы
  13.     java позволяет в рамках одного проекта в разных пекеджах использовать классы с одинаковым именем
  14.     и вот как раз в именах пекеджей - и стоит зашивать всякую структурную информацию - такая то версия такой-то работы, например
  15.  
  16.     пока в рамках этого ревью не буду повторяться про ошибки, которые мы поправим еще в первой работе
  17.     и не буду писать о том, что станет яснее после выполнения задания про Main Use Cases и прочтения этого задания
  18. */
  19.  
  20.     @Test
  21.     public void detailedSmokeChecklist(){
  22.     /*
  23.         Smoke - важная информация
  24.         но - она не про метод, а про покрытие
  25.         далее на курсе мы рассмотим, как такое обычно показываем
  26.  
  27.         Имя метода = описание того, что делаем, в данном случае - того что тестируем
  28.         да, тут действий будет не 2-3 - потому их в имени метода не перечислишь
  29.         что-то общее нужно - фразы с ...LifeCycle, CommonFlow и т п
  30.         и важно в фразе уточнить - чей это флоу - это флоу тасок
  31.  
  32.         в прошлой работе - было удачное имя
  33.         тут - можно использовать почти такое же)
  34.  
  35.     */
  36. ***********************************************************
  37. //switch to "completed filter"
  38.         $$("#filters li").get(2).click();
  39. /*
  40.     поскольку нам нигде не нужно работать в целом с $$("#filters li")
  41.     можно обращаться к линкам переходов с фильтра на фильтр напрямую
  42.  
  43.     наглядно получится - используя $(By.linkText(...))
  44.  
  45.     если в коде повторяется независимый селектор - тебе нужна переменная
  46.     почитай про DRY
  47.     https://docs.google.com/document/d/13dNyFGbI7mV22UUhH8E0LJ7SzabAmX7Bw7VCHScYfiU/edit#
  48.     (пролистывай, в этом разделе несколько вопросов-ответов)
  49.     особенно - вот этот момент
  50.     https://docs.google.com/document/d/13dNyFGbI7mV22UUhH8E0LJ7SzabAmX7Bw7VCHScYfiU/edit#heading=h.pk1xvngaj4rk
  51.  
  52.     раз все остальные действия завернуты в метод - то и переходы на фильтр стоит тоже завернуть
  53.     сразу почитай про KISS principle (несколько вопросок-ответов в разделе)
  54.     https://docs.google.com/document/d/13dNyFGbI7mV22UUhH8E0LJ7SzabAmX7Bw7VCHScYfiU/edit#bookmark=id.kjyb84wqnhj4
  55.     особенно - вот это
  56.     https://docs.google.com/document/d/13dNyFGbI7mV22UUhH8E0LJ7SzabAmX7Bw7VCHScYfiU/edit#bookmark=id.8bflixemdgfw
  57. */
  58.  
  59. *************************************
  60.  
  61.     private void editTasks(String current, String newString){
  62.     /*
  63.         будь точен и именах методов и параметров
  64.  
  65.         редактируем не таскИ, а таскУ
  66.         также - придерживайся ранее выбранной стратегии - отражать или нет в именах методов-действий -
  67.         что действие выполняется над тасками
  68.  
  69.         про имена параметров - вспомни ревью к прошлой работе
  70.         а чтобы показать было-стало
  71.         используй часто применяемые old & new или from & to
  72.     */
  73.         String xpath = ".//label[contains(text(), '"+ current + "')]/../../form/input";
  74.         /*
  75.             тебе точно не нужен xpath
  76.                     он вообще редко когда нужен
  77.  
  78.                     http://stackoverflow.com/questions/16788310/what-is-the-difference-between-css-selector-xpath-which-is-betteraccording-t
  79.                     http://elementalselenium.com/tips/32-xpath-vs-css
  80.  
  81.                     Некоторые вещи невозможно сделать без xpath
  82.                     там конечно он пригодится)
  83.                     в остальных случаях - советую сцц селектор
  84.                     или другие возможности используемого инструмента (ты уже искал по тексту таску в списке task.find(Condition.exactText(current)))
  85.  
  86.                     икспасы ЗЛО, потому что громоздкие и плохо поддерживаемые
  87.                     и их стоит использовать очень редко, только когда цсс-ов не хватает
  88.                     чуть ли не единственное место, где тебе нужны будут знания икспасов - это интервью
  89.                     потому что большинство автоматизаторов - плохие автоматизаторы) и почему-то думают что икспасы - это круто :)
  90.  
  91.                     есть, конечно, ситуации, когда xpath будет полезен)
  92.                     но их несравнимо меньше случаев, когда без него можно спокойно обойтись
  93.  
  94.                     кстати, есть полезные таблички и линки про xpath & cssSelectors
  95.                     https://docs.google.com/document/d/13dNyFGbI7mV22UUhH8E0LJ7SzabAmX7Bw7VCHScYfiU/edit#heading=h.bpam7gagxx94
  96.  
  97.             второй момент
  98.                     с чем мы работаем
  99.                     с элементом input (если точнее input.edit, мотому нагляднее будет - .edit)
  100.                     внутри редактируемой таски
  101.                     да, после даблклика - не получается таску найти по ее тексту
  102.                     но - раз ты нашел вот этот элемент  input.edit
  103.                     то, думаю, сможешь увидеть и другие моменты - как меняется HTML -
  104.                     когда таска находится в режиме редактирования
  105.  
  106.                     если у тебя есть переменная для какого-то элемента / коллекции элементов
  107.                     и тебе надо доступиться до чего-то внутри этой структуры
  108.                     то лучше не использовать независимый селектор, а доступаться черех уже существующую переменную
  109.  
  110.                     что нам нужно получить
  111.                     элемент .edit из редактируемой таски из списка тасок
  112.                     вот и оттолкнемся от списка тасок
  113.                     tasks.find(...).find(...)
  114.                     такой код - лучше независимого селектора -
  115.                     т к так понятнее - с чем мі работаем
  116.                     так в коде будет гораздо меньше независимых селекторов -
  117.                     код будет легче поддерживать
  118.                     и ошибки при выполнении кода вида   tasks.find(...).find(...)
  119.                     будут точнее описывать пролему, нежели ошибки при использовании независимого селектора)
  120.                     это общее правило, его не только тут придерживайся
  121.  
  122.              есть в разделе
  123.                     https://docs.google.com/document/d/13dNyFGbI7mV22UUhH8E0LJ7SzabAmX7Bw7VCHScYfiU/edit#heading=h.tt32gohmbl6d
  124.                     подсказки  по этому заданию
  125.  
  126.                     они специально разнесены на разные листы - чтоб ты использовал только те, которые тебе необходимы)
  127.                     а не просто все сразу прочитал)
  128.         */
  129.         task.find(Condition.exactText(current)).doubleClick();
  130.         $(By.xpath(xpath)).setValue(newString);
  131.         $("#new-todo").click();
  132.         /*
  133.             более стандартный вариант подтвердить редактирование - нажать enter
  134.             вот этот вариант - с кликом на другом элементе - это как раз additional edit operation
  135.  
  136.             реализуй обычный edit - с нажатием enter
  137.             а нужно ли тебе реализовывать этот дополнительный вариант в рамках smoke - подумай про приоритеты
  138.  
  139.             также напоминаю - если селектор $("#new-todo")
  140.             используется несколько раз в разных частях кода -
  141.             значит пора использовать переменную - быть DRY
  142.         */
  143.     }
Advertisement
Add Comment
Please, Sign In to add comment