Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Edit сделал
- но скорее случайно чем осмысленно и так и не понял почему не работают селекторы
- $$("#todo-list>li").find(exactText("task2")).doubleClick();
- $(".edit"). setValue("2323232");
- /*
- у каждой таски - элемента коллекции $$("#todo-list>li") - есть внутренний элемент $(".edit")
- когда ты получаешь элемент $(".edit") - то это = первый элемент, найденный на странице, который удослетворяет такому селектору
- судя по всему - такой элемент нашелся у первой таски - у которой этот элемент как раз невидим
- попробуй этот же код - на варианте - когда таска - единственная в списке
- понятно, что нам такое не подойдет
- просто чтоб понять
- а вот когда ты сначала - получаешь таску
- и уже у нее - получаешь ее внутренний элемент - то поиск элемента идет не на всей странице
- а лишь среди подчиненных элементов нашей таски
- т е $$("#todo-list>li").find(....) = таска из списка, найденная по такому-то кондишену
- и у нее - получаем внутренний элемент - $$("#todo-list>li").find(....).find(".edit")
- */
- *****************************
- $$("#todo-list>li").find(exactText("task2")).doubleClick();
- $(".active editing .edit"). setValue("2323232");
- /*
- я приводила в прошлый раз объяснения - что есть классы - строки 91-98 предыдущих ответов
- и active, и editing - это cssClass элемента-таски
- и если тебе нужно выбрать с помощью css selector-а таски с классом таким-то и классом таким-то
- то получишь -
- не .class1 class2
- а .class1.class2
- в css selector-е - точка нужна перед каждым именем cssClass-а
- еще - пробел - имеет свой смысл в css selector-е
- почитай
- http://www.w3schools.com/cssref/css_selectors.asp
- */
- *******************************************
- $$("#todo-list>li").find(exactText("task2")).doubleClick();
- $("#todo-list>li [class='active']>.edit"). setValue("2323232");
- /*
- тут - вопросы к селектору из второй строчки
- просто - возьми селектор и в FirePath (или FireFinder, или еще каком плагине для работы с селекторами)
- посмотри - что будет поределяться
- тут конечно не удобная ситуация - тк режим редактирования таски тут же прекращается
- как только она теряет фокус
- потому отлаживать таой селектор - сложно
- вопрос 1 - что значит пробел в селекторе между li и [class='active']
- вопрос 2 - что дает нам такое уточнение - [class='active']
- */
- ***************************************
- $$("#todo-list>li").find(exactText("task2")).doubleClick();
- $("#todo-list>li .active editing .edit"). setValue("2323232");
- /*
- вопрос к .active editing
- выше было про это
- */
- ********************************************
- $$("#todo-list>li").find(exactText("task2")).doubleClick();
- $("#todo-list>li [class='active editing].edit"). setValue("2323232");
- /*
- тут вопрос к пробелу между li и [class='active editing]
- к закрывающей кавычке 'active editing
- к отсутствию пробела между [class='active editing] и .edit"
- */
- $$("#todo-list>li").find(exactText("task2")).doubleClick();
- $("#todo-list>li[class='active edit].edit"). setValue("2323232");
- /*
- [class='active edit] - нету класса edit у самой таски
- нету закрывающей кавычки
- про смысл пробела в селекторе (или его отсутствия) - разберись - [class='active edit].edit
- */
- *****************************************
- А заработал
- $$("#todo-list>li").find(exactText("task2")).doubleClick();
- $(".active.editing .edit"). setValue("2323232");
- Случайно увидел вариант с точкой справа
- И если его подрезать (но менее наглядно)
- $$("#todo-list>li").find(exactText("task2")).doubleClick();
- $(".editing .edit"). setValue("2323232");
- /*
- ну, уже надеюсь - вопросов быть не должно к .active.editing
- и к тому - почему работает .editing .edit
- теперь по сути
- есть у нас коллекция тасок - tasks
- и мы работаем с таской - их этой коллекции
- потому - правильнее - оттолкнуться от tasks
- получить внутри нее таску с классом ....
- и внутри этой таски - получить элемент ....
- т е - вместо
- $(".editing .edit").setValue("2323232");
- ты получишь
- tasks.findBy(....).find(...).setValue();
- какие плюсы такого подхода
- первое - наглядность.
- мы - еще ничего не понимая про то, как работает приложение
- уже из такой строки можем сделать вывод - tasks.findBy(....) - что это элемент коллекции tasks = таска списка
- а tasks.findBy(....).find(...) - некий внутренний элемент так полученной таски
- по селектору $(".editing .edit") - таких выводов сделать невозможно без анализа html кода страницы
- почему ам нужно искать таску по ее классу editing - мы уже с тобой обсуждали
- */
- ******************************************
- 2. Какое-то у меня недопонимание с селекторами
- Так не работает
- $("#filters li a.selected").click();
- $("#filters li a.selected [href="#/active]").click();
- /*
- для начала посмотри - у всех ли элементов-фильтров есть класс selected
- сравни
- #filters li a.selected [href="#/active]
- и
- #filters li a[href='#/active']
- посмотри на описание синтаксиса - думаю, будет ясно, в чем дело
- работу с селекторами начинай в браузере
- так значительно меньше сил потратишь на их поиск
- */
- ***************************
- Только так удалось выкрутиться
- $$("#filters li").find(exactText("active")).click();
- Но хочется понять как правильно если без привязки к тексту
- /*
- да, можно было и так)
- а нашем маленьком приложении - элементов a - немного
- потому - мы вообще себе можем позволить вариант $(By.linkText(...))
- если бы было много разных элементов a
- то тогда да - стоит оттолкнуться от $$("#filters li") и там уже искать
- в таком случае - да, такой метод был бы ок
- по поводу - как правильно
- все как в математике) - необходимые и достаточные условия
- необходимые - мы должны точно идентифицировать нужный элемент/элементы
- без этого просто ничего не получится
- достаточное - из рабочих вариантов - стоит предпочесть простые, наглядные, лаконичные варианты
- таких вариантов - запросто может быть не один
- тут задачка будет многофакторная)
- и от этого - до некоторой степени(лишь до некоторой)- субъективная
- */
Advertisement
Add Comment
Please, Sign In to add comment