Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class ToDoMVCEndToEnd {
- /*
- Имя тест-класса - должно отвечать conventions - заканчиваться на Test
- EndToEnd - это свойсвто не тест-класса, а тест-метода
- к тому же - нам это знание мало что дает
- фраза EndToEnd в имени - нам не опишет - что мы тестируем
- а если мы смотрим на код метода - нам и так станет понятно - что это е2е
- в общем - нету смысла в именах писать про е2е
- назвать тест-класс можно как и в прошлой работе - ToDoMVCTest
- и расположить этот класс в другом пекедже относительно прошлой работы
- java позволяет в рамках одного проекта в разных пекеджах использовать классы с одинаковым именем
- и вот как раз в именах пекеджей - и стоит зашивать всякую структурную информацию - такая то версия такой-то работы, например
- пока в рамках этого ревью не буду повторяться про ошибки, которые мы поправим еще в первой работе
- и не буду писать о том, что станет яснее после выполнения задания про Main Use Cases и прочтения этого задания
- */
- @Test
- public void detailedSmokeChecklist(){
- /*
- Smoke - важная информация
- но - она не про метод, а про покрытие
- далее на курсе мы рассмотим, как такое обычно показываем
- Имя метода = описание того, что делаем, в данном случае - того что тестируем
- да, тут действий будет не 2-3 - потому их в имени метода не перечислишь
- что-то общее нужно - фразы с ...LifeCycle, CommonFlow и т п
- и важно в фразе уточнить - чей это флоу - это флоу тасок
- в прошлой работе - было удачное имя
- тут - можно использовать почти такое же)
- */
- ***********************************************************
- //switch to "completed filter"
- $$("#filters li").get(2).click();
- /*
- поскольку нам нигде не нужно работать в целом с $$("#filters li")
- можно обращаться к линкам переходов с фильтра на фильтр напрямую
- наглядно получится - используя $(By.linkText(...))
- если в коде повторяется независимый селектор - тебе нужна переменная
- почитай про DRY
- https://docs.google.com/document/d/13dNyFGbI7mV22UUhH8E0LJ7SzabAmX7Bw7VCHScYfiU/edit#
- (пролистывай, в этом разделе несколько вопросов-ответов)
- особенно - вот этот момент
- https://docs.google.com/document/d/13dNyFGbI7mV22UUhH8E0LJ7SzabAmX7Bw7VCHScYfiU/edit#heading=h.pk1xvngaj4rk
- раз все остальные действия завернуты в метод - то и переходы на фильтр стоит тоже завернуть
- сразу почитай про KISS principle (несколько вопросок-ответов в разделе)
- https://docs.google.com/document/d/13dNyFGbI7mV22UUhH8E0LJ7SzabAmX7Bw7VCHScYfiU/edit#bookmark=id.kjyb84wqnhj4
- особенно - вот это
- https://docs.google.com/document/d/13dNyFGbI7mV22UUhH8E0LJ7SzabAmX7Bw7VCHScYfiU/edit#bookmark=id.8bflixemdgfw
- */
- *************************************
- private void editTasks(String current, String newString){
- /*
- будь точен и именах методов и параметров
- редактируем не таскИ, а таскУ
- также - придерживайся ранее выбранной стратегии - отражать или нет в именах методов-действий -
- что действие выполняется над тасками
- про имена параметров - вспомни ревью к прошлой работе
- а чтобы показать было-стало
- используй часто применяемые old & new или from & to
- */
- String xpath = ".//label[contains(text(), '"+ current + "')]/../../form/input";
- /*
- тебе точно не нужен xpath
- он вообще редко когда нужен
- http://stackoverflow.com/questions/16788310/what-is-the-difference-between-css-selector-xpath-which-is-betteraccording-t
- http://elementalselenium.com/tips/32-xpath-vs-css
- Некоторые вещи невозможно сделать без xpath
- там конечно он пригодится)
- в остальных случаях - советую сцц селектор
- или другие возможности используемого инструмента (ты уже искал по тексту таску в списке task.find(Condition.exactText(current)))
- икспасы ЗЛО, потому что громоздкие и плохо поддерживаемые
- и их стоит использовать очень редко, только когда цсс-ов не хватает
- чуть ли не единственное место, где тебе нужны будут знания икспасов - это интервью
- потому что большинство автоматизаторов - плохие автоматизаторы) и почему-то думают что икспасы - это круто :)
- есть, конечно, ситуации, когда xpath будет полезен)
- но их несравнимо меньше случаев, когда без него можно спокойно обойтись
- кстати, есть полезные таблички и линки про xpath & cssSelectors
- https://docs.google.com/document/d/13dNyFGbI7mV22UUhH8E0LJ7SzabAmX7Bw7VCHScYfiU/edit#heading=h.bpam7gagxx94
- второй момент
- с чем мы работаем
- с элементом input (если точнее input.edit, мотому нагляднее будет - .edit)
- внутри редактируемой таски
- да, после даблклика - не получается таску найти по ее тексту
- но - раз ты нашел вот этот элемент input.edit
- то, думаю, сможешь увидеть и другие моменты - как меняется HTML -
- когда таска находится в режиме редактирования
- если у тебя есть переменная для какого-то элемента / коллекции элементов
- и тебе надо доступиться до чего-то внутри этой структуры
- то лучше не использовать независимый селектор, а доступаться черех уже существующую переменную
- что нам нужно получить
- элемент .edit из редактируемой таски из списка тасок
- вот и оттолкнемся от списка тасок
- tasks.find(...).find(...)
- такой код - лучше независимого селектора -
- т к так понятнее - с чем мі работаем
- так в коде будет гораздо меньше независимых селекторов -
- код будет легче поддерживать
- и ошибки при выполнении кода вида tasks.find(...).find(...)
- будут точнее описывать пролему, нежели ошибки при использовании независимого селектора)
- это общее правило, его не только тут придерживайся
- есть в разделе
- https://docs.google.com/document/d/13dNyFGbI7mV22UUhH8E0LJ7SzabAmX7Bw7VCHScYfiU/edit#heading=h.tt32gohmbl6d
- подсказки по этому заданию
- они специально разнесены на разные листы - чтоб ты использовал только те, которые тебе необходимы)
- а не просто все сразу прочитал)
- */
- task.find(Condition.exactText(current)).doubleClick();
- $(By.xpath(xpath)).setValue(newString);
- $("#new-todo").click();
- /*
- более стандартный вариант подтвердить редактирование - нажать enter
- вот этот вариант - с кликом на другом элементе - это как раз additional edit operation
- реализуй обычный edit - с нажатием enter
- а нужно ли тебе реализовывать этот дополнительный вариант в рамках smoke - подумай про приоритеты
- также напоминаю - если селектор $("#new-todo")
- используется несколько раз в разных частях кода -
- значит пора использовать переменную - быть DRY
- */
- }
Advertisement
Add Comment
Please, Sign In to add comment