Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class TodoMVCTest {
- @Test
- public void testCreateTask()
- /*
- мы ведь в этом тест-методе - не только тестируем создание таски
- значит - имя тест-метода некорректно
- ознакомься с разделом faq по неймингу
- и прими решение насчет имени тест-метода
- https://docs.google.com/document/d/10qSwWTQ6pGfVZSwOes-1QSmdflMiGD2U_y53VHq2m20/edit?usp=sharing
- обрати особое внимание на это
- https://docs.google.com/document/d/10qSwWTQ6pGfVZSwOes-1QSmdflMiGD2U_y53VHq2m20/edit#bookmark=id.txqig9rkgybo
- */
- {
- /*
- используй в работе - стандартное форматирование кода
- в IntelIJ Idea - выдели код + в меню - code->reformat code
- обрати внимание - как сдвинется єта фигурная скобка
- стандартно отформатированный код - большинством специалистов воспринимается проще
- стоит отрастить привычку форматировать код хотя бы перед тем, как выкладывать в репозиторий
- да и вообще - это удобно)
- */
- open("https://todomvc4tasj.herokuapp.com/");
- /*
- ты уже неплохо используешь пропуски строк для разделения кода на блоки
- и тут не помешал бы пропуск строки)
- */
- $("#new-todo").setValue("Task1").pressEnter();
- $("#new-todo").setValue("Task2").pressEnter();
- $("#new-todo").setValue("Task3").pressEnter();
- $("#new-todo").setValue("Task4").pressEnter();
- $$("#todo-list li").shouldHave(size(4));
- $$("#todo-list li").shouldHave(exactTexts("Task1","Task2", "Task3", "Task4"));
- /*
- тут - достаточно проверки exactTexts
- как осуществяется проверка по кондишену exactTexts
- сверяется количество, порядок и тексты
- количество элементов коллекции должно быть равно количеству переданных текстов
- иначе - проверка не прошла
- и далее - по порядку сверяются текст элемента и переданный текст
- нулевой - с нулевым
- первый с первым
- и т д
- таким образом - уже не нужно проверять размер списка
- раз уже проверили exactTexts
- про проверки - учти здесь и далее
- */
- $("#todo-list li:nth-of-type(2)").click();
- /*
- на самом деле - нам не нужно кликать на таске
- достаточно навести на нее курсор мыши - и кнопка удаления станет видимой
- метод для наведения курсора мыши - hover()
- это метод элемента (так же как и click())
- */
- $("#todo-list li:nth-of-type(2) button.destroy").click(); //???
- /*
- комментарий с вопросами - не понятен)
- если не совсем ясно - почему именно так нужно реализовывать удаление таски - тоже загляни в faq - там есть раздел и про это
- из селектора можно без ущерба убрать button
- селектор - это, фактически, маска
- по которой мы находим элемент/коллекцию элементов
- и она должна быть
- 1 - точной (чтоб мы находили все что нужно и ничего кроме этого)
- 2 - наглядной (чтоб мы использовали тот вариант маски - который сам поясняет наш код
- 2 - лаконичной (если какая-то часть селектора ничего из выше перечисленных функций не выполняет -
- то лучше ее из селектора выкинуть)
- */
- $$("#todo-list li").shouldHave(size(3));
- $$("#todo-list li").shouldHave(exactTexts("Task1", "Task3", "Task4"));
- /*
- и тут только exactTexts стоит оставить
- */
- $("#todo-list li:nth-of-type(3) input.toggle").click();
- /*
- из описанных выше соображений - можно из селектора убрать input
- */
- $("#clear-completed").click();
- $$("#todo-list li").shouldHave(size(2));
- $$("#todo-list li").shouldHave(exactTexts("Task1", "Task3"));
- /*
- и тут только exactTexts стоит оставить
- */
- $("#toggle-all").click();
- $("#clear-completed").click();
- $$("#todo-list li").shouldHave(size(0));
- /*
- эту же проверку можно переписать как
- $$("#todo-list li").shouldBe(empty);
- технически - одно и то же
- но чуть нагляднее и лаконичнее
- */
- }
- }
- ****************************************
- про xPath-ы
- Икспасы - ЗЛО, потому что громоздкие, нечитабельные и потому плохо поддерживаемые.
- Их стоит использовать очень редко, только когда CSS-селекторов не хватает
- единственное место где тебе нужны будут знания икспасов - это интервью, потому что большинство автоматизаторов - плохие автоматизаторы)
- и почему-то думают что икспасы это круто :)
- так вот… когда нужно будет пройти интервью - тогда и выучишь икспасы - а сейчас нечего дурным голову забивать
- вот здесь я критикую икспасы с аргументами: http://automated-testing.info/t/pomogite-razobratsya-s-problemoj-czikla-v-selenide/10467/8
- реально в селениде можно почти всегда обходиться без икспасов.
- Даже варианты типа:
- `$(".element").find(byXpath("./following-sibling::*/input"));`
- обычно можно переписать как:
- <
- `$(".element").find(byXpath("..//input"));`
- <
- `$(".element").find(byXpath("..")).find("input");`
- <
- `$(".element").parent().find("input")`
- А скоро в селениде появится еще и полный аналог (https://github.com/codeborne/selenide/issues/429):
- `$(".element").followingSibling().find("input")`
- Бонусом при такой разбивке будет то, что в случае падения теста мы сможем более точно определить по сообщению об ошибке -
- где именно проблема в локаторе;)
- А так например при падении на `.find(byXpath("./following-sibling::*/input"));`
- мы не сможем по ошибке определить
- - нет ли родного брата `./following-sibling::*`
- - или нет элемента `input`
- Вот еще ссылок:
- 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
Advertisement
Add Comment
Please, Sign In to add comment