julia_v_iluhina

Untitled

Dec 16th, 2016
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.86 KB | None | 0 0
  1. Edit сделал
  2. но скорее случайно чем осмысленно и так и не понял почему не работают селекторы
  3.  
  4. $$("#todo-list>li").find(exactText("task2")).doubleClick();
  5. $(".edit"). setValue("2323232");
  6. /*
  7.     у каждой таски - элемента коллекции  $$("#todo-list>li") - есть внутренний элемент $(".edit")
  8.  
  9.     когда ты получаешь элемент $(".edit") - то это = первый элемент, найденный на странице, который удослетворяет такому селектору
  10.     судя по всему - такой элемент нашелся у первой таски - у которой этот элемент как раз невидим
  11.  
  12.     попробуй этот же код - на варианте - когда таска - единственная в списке
  13.     понятно, что нам такое не подойдет
  14.     просто чтоб понять
  15.  
  16.     а вот когда ты сначала - получаешь таску
  17.     и уже у нее - получаешь ее внутренний элемент - то поиск элемента идет не на всей странице
  18.     а лишь среди подчиненных элементов нашей таски
  19.     т е $$("#todo-list>li").find(....) = таска из списка, найденная по такому-то кондишену
  20.     и у нее - получаем внутренний элемент - $$("#todo-list>li").find(....).find(".edit")
  21. */
  22. *****************************
  23. $$("#todo-list>li").find(exactText("task2")).doubleClick();
  24. $(".active editing .edit"). setValue("2323232");
  25. /*
  26.     я приводила в прошлый раз объяснения - что есть классы - строки 91-98 предыдущих ответов
  27.  
  28.     и active, и editing - это cssClass элемента-таски
  29.     и если тебе нужно выбрать с помощью css selector-а таски с классом таким-то и классом таким-то
  30.     то получишь  -
  31.     не .class1 class2
  32.     а  .class1.class2
  33.     в css selector-е - точка нужна перед каждым именем  cssClass-а
  34.     еще - пробел - имеет свой смысл в css selector-е
  35.  
  36.     почитай
  37.     http://www.w3schools.com/cssref/css_selectors.asp
  38. */
  39. *******************************************
  40. $$("#todo-list>li").find(exactText("task2")).doubleClick();
  41. $("#todo-list>li [class='active']>.edit"). setValue("2323232");
  42. /*
  43.     тут - вопросы к селектору из второй строчки
  44.     просто  - возьми селектор и в FirePath (или FireFinder, или еще каком плагине для работы с селекторами)
  45.     посмотри - что будет поределяться
  46.  
  47.     тут конечно не удобная ситуация - тк режим редактирования таски тут же прекращается
  48.     как только она теряет фокус
  49.     потому отлаживать таой селектор - сложно
  50.  
  51.     вопрос 1 - что значит пробел в селекторе между li и [class='active']
  52.     вопрос 2 - что дает нам такое уточнение - [class='active']
  53. */
  54. ***************************************
  55. $$("#todo-list>li").find(exactText("task2")).doubleClick();
  56. $("#todo-list>li .active editing .edit"). setValue("2323232");
  57. /*
  58.     вопрос к .active editing
  59.     выше было про это
  60. */
  61. ********************************************
  62. $$("#todo-list>li").find(exactText("task2")).doubleClick();
  63. $("#todo-list>li [class='active editing].edit"). setValue("2323232");
  64. /*
  65.     тут вопрос к пробелу между li и [class='active editing]
  66.     к закрывающей кавычке 'active editing
  67.     к отсутствию пробела между [class='active editing] и .edit"
  68. */
  69. $$("#todo-list>li").find(exactText("task2")).doubleClick();
  70. $("#todo-list>li[class='active edit].edit"). setValue("2323232");
  71. /*
  72.     [class='active edit] - нету класса edit у самой таски
  73.     нету закрывающей кавычки
  74.     про смысл пробела в селекторе (или его отсутствия) - разберись - [class='active edit].edit
  75.  
  76.  
  77. */
  78. *****************************************
  79. А заработал
  80.  
  81. $$("#todo-list>li").find(exactText("task2")).doubleClick();
  82. $(".active.editing .edit"). setValue("2323232");
  83. Случайно увидел вариант с точкой справа
  84. И  если его подрезать (но менее наглядно)
  85. $$("#todo-list>li").find(exactText("task2")).doubleClick();
  86. $(".editing .edit"). setValue("2323232");
  87. /*
  88.     ну, уже надеюсь - вопросов быть не должно к .active.editing
  89.  
  90.     и к тому - почему работает .editing .edit
  91.  
  92.     теперь по сути
  93.     есть у нас коллекция тасок - tasks
  94.     и мы работаем с таской - их этой коллекции
  95.     потому - правильнее - оттолкнуться от  tasks
  96.     получить внутри нее таску с классом ....
  97.     и внутри этой таски - получить элемент ....
  98.     т е - вместо
  99.     $(".editing .edit").setValue("2323232");
  100.     ты получишь
  101.     tasks.findBy(....).find(...).setValue();
  102.  
  103.     какие плюсы такого подхода
  104.     первое - наглядность.
  105.     мы - еще ничего не понимая про то, как работает приложение
  106.     уже из такой строки можем сделать вывод - tasks.findBy(....) - что это элемент коллекции tasks = таска списка
  107.     а tasks.findBy(....).find(...) - некий внутренний элемент так полученной таски
  108.  
  109.     по селектору $(".editing .edit") - таких выводов сделать невозможно без анализа html кода страницы
  110.  
  111.  
  112.     почему ам нужно искать таску по ее классу  editing - мы уже с тобой обсуждали
  113. */
  114. ******************************************
  115. 2. Какое-то у меня недопонимание с селекторами
  116.  
  117. Так не работает
  118. $("#filters li a.selected").click();
  119. $("#filters li a.selected [href="#/active]").click();
  120. /*
  121.    для начала посмотри - у всех ли элементов-фильтров есть класс  selected
  122.    сравни
  123.    #filters li a.selected [href="#/active]
  124.     и
  125.     #filters li a[href='#/active']
  126.  
  127.     посмотри на описание синтаксиса - думаю, будет ясно, в чем дело
  128.  
  129.     работу с селекторами начинай в браузере
  130.     так значительно меньше сил потратишь на их поиск
  131. */
  132. ***************************
  133. Только так удалось выкрутиться
  134. $$("#filters li").find(exactText("active")).click();
  135. Но хочется понять как правильно если без привязки к тексту
  136. /*
  137.     да, можно было и так)
  138.  
  139.     а нашем маленьком приложении - элементов a - немного
  140.  
  141.     потому - мы вообще себе можем позволить вариант $(By.linkText(...))
  142.  
  143.     если бы было много разных элементов a
  144.     то тогда да - стоит оттолкнуться от $$("#filters li") и там уже искать
  145.     в таком случае - да, такой метод был бы ок
  146.  
  147.     по поводу - как правильно
  148.  
  149.     все как в математике) - необходимые и достаточные условия
  150.  
  151.         необходимые - мы должны точно идентифицировать нужный элемент/элементы
  152.         без этого просто ничего не получится
  153.  
  154.         достаточное - из рабочих вариантов - стоит предпочесть простые, наглядные, лаконичные варианты
  155.         таких вариантов - запросто может быть не один
  156.         тут задачка будет многофакторная)
  157.         и от этого - до некоторой степени(лишь до некоторой)- субъективная
  158. */
Advertisement
Add Comment
Please, Sign In to add comment