yashaka

Untitled

Feb 23rd, 2017
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.87 KB | None | 0 0
  1. Да, ты прав, вижу проблемы с абстракцией, я просто не видел зависимости между методом в ConciseAPI и окончательной реализацией, это сейчас видно, что их минимально тоже нужно править)
  2. Продвинулся дальше, поправил часть кондишнов, по ходу сразу правил методы и проверял их работу, сейчас есть проблема с методом:
  3. public static void toggle(String taskText) {
  4. $(tasks, elementWithText(taskText), ".toggle");
  5. }
  6. Вроде бы как есть метод в Concise API на основе которого он работает и выглядит также:
  7.  
  8. public static WebElement $(By elements, Function<By, WebElement> conditionToWaitParentElement, String innerElementCssSelector) {
  9. return $(elements, conditionToWaitParentElement, byCss(innerElementCssSelector));
  10. }
  11.  
  12. Вот коммит последний: https://bitbucket.org/nekontachik/selenium_framework/src/6432f32fbe3aef7527124631fbd22d3d3eefb2e5/src/?at=master
  13.  
  14. И да, ты прав, переключаюсь параллельно на exercism
  15.  
  16. Спокойной ночи
  17.  
  18.  
  19.  
  20. такс, вот список твоих методов:
  21. ```
  22. public static WebElement $(By element, Function<By, WebElement> conditionToWaitElement) {
  23. return assertThat(conditionToWaitElement, element);
  24. }
  25.  
  26. /*
  27. почему в этом первый параметр называется element, разве мы когда то искали внутри элемента другой элемент по кондишену?
  28. мы ведь искали по кондишену элементу внутри списка элементов а не элемента...
  29.  
  30. разве не логично назыать тогда первый параметр By elements
  31. ?
  32.  
  33. если быть совсем точным то это кстати By elementsLocator
  34. но можно быть и лаконичным, и оставить elements
  35. */
  36.  
  37. public static WebElement $(Function<By, WebElement> condition, By elementLocator) {
  38. return assertThat(condition, elementLocator);
  39. }
  40.  
  41. /*
  42. а чем этот метод отличается отпредыдущего кроме того что у него порядок параметров другой, и имя для локатора как раз с Locator в конце?
  43.  
  44. зачем он?
  45. */
  46.  
  47. public static WebElement $(By element) {
  48. return assertThat(visibilityOfElementLocated(), element);
  49. }
  50.  
  51. /*
  52. с этим методом все как бы ок... но давай глянем на реализацию кондишена:
  53.  
  54. public static Function<By, WebElement> visibilityOfElementLocated() {
  55. return elementExceptionsCatcher(new Function<By, WebElement>() {
  56.  
  57. List<WebElement> elements;
  58.  
  59. public WebElement apply(By element) {
  60. elements = getDriver().findElements(element);
  61. /*
  62. какой elementS? какой findElementS? зачем нам список? мы же собрались
  63. проверять что элемент видимый... зачем нам искать по этому локатору список элементов? я в недоумении :)
  64. */
  65.  
  66. /*
  67. о боже а теперь посмотри на свою следующую строчку:
  68. ты в ней даже не юзаешь этот elements который ты нашел...
  69. */
  70. return CustomConditions2.elementIfVisible(getDriver().findElement(element));
  71. }
  72. /*
  73. а где же ты его юзал?
  74. */
  75.  
  76. public String toString() {
  77. return "visibility of element located by " + elements;
  78. /*
  79. а вот где, и о боже... ты вчитайся только в эту фразу:
  80. visibility of element located by elements
  81. это как так?
  82. element located by elements?
  83. о_О
  84. где логика?
  85. во первых нелогично то что ты передаешь elementS
  86. то есть список, а мы ведь тут таки с одним элементом должны работать
  87. во вторых нелогично то что в фразе
  88. located by ...
  89. в ее продоженни (там где три точки сейчас) ожидается ЛОКАТОР!
  90. слово то located зачем по твоему?
  91. а ты туда не локатор приплюсовал а уже конкретно найденный список...
  92. о_О
  93. у меня скоро раплавится мозг :) чесно чесно :)
  94. хотя сейчас я поел мороженного, и поэтому счастлив) и как то держусь)
  95. не так нервничаю как обычно видя такой код :)
  96. */
  97. }
  98. });
  99. }
  100.  
  101. */
  102.  
  103. public static WebElement $(String cssSelector) {
  104. return $(byCss(cssSelector));
  105. }
  106.  
  107. /*
  108. сдесь все логично...
  109. */
  110.  
  111.  
  112. public static WebElement $(By element, Function<By, WebElement> conditionToWaitParentElement, By innerElementLocator) {
  113. return assertThat(conditionToWaitParentElement, element).findElement(innerElementLocator);
  114. }
  115.  
  116. /*
  117. это по идее должен быть такой же метод как самый первый был... только этот еще в конце и внутри результата (найденного элемента по кондишену в списке элементов) должен найти внутренний элемент...
  118.  
  119. и снова - та же проблема - мы же в СПИСКЕ элементов должны искать... почему By element, а не By elementS ???
  120. */
  121.  
  122.  
  123. public static WebElement $(By elements, Function<By, WebElement> conditionToWaitParentElement, String innerElementCssSelector) {
  124. return $(elements, conditionToWaitParentElement, byCss(innerElementCssSelector));
  125. }
  126. /*
  127. опа!!! ну ничего себя :)
  128. Ура!
  129. тут все правильно :)))) есть таки s в конце имени первого параметра :)
  130. */
  131. ```
  132.  
  133. но говоришь такой код не работает:
  134.  
  135. public static void toggle(String taskText) {
  136. $(tasks, elementWithText(taskText), ".toggle");
  137. }
  138.  
  139. говоришь есть проблема
  140. так а в чем проблема?
  141.  
  142. я по твоему телепат что могу знать почему оно у тебя там еррор выдает?
  143. мог бы мне хотябы еррор показать... скриншот какой то скинуть...
  144.  
  145. иногда конечно видно сразу мне где ошибка... но не всегда... учись обьяснять свои проблемы более детально
  146.  
  147. это тебе самому же начнет помогать находить решение...
  148.  
  149. ну ок...
  150. код выглядит нормальным...
  151. единственное что тут пока загадка - это кондишен elementWithText
  152. ну ок...
  153. давай заценим его:
  154.  
  155. public static Function<By, WebElement> elementWithText(final String exactText) {
  156. /*
  157. вот кстати здесь речь идет не просто о элементе а о элементе списка элементов
  158. поэтому и имя должно быть более детальным listElementWithText
  159. */
  160. return elementExceptionsCatcher(new Function<By, WebElement>() {
  161.  
  162. List<String> actualTexts = new ArrayList<String>();
  163. List<WebElement> elements;
  164.  
  165. public WebElement apply(By element) {
  166. /*
  167. и вот здесь element кстати не совсем удачное имя... потому что в этом случае мы как раз ожидаем на этом месте "локатор для списка элементов"
  168. поэтому имя можно подправить на elementsLocator
  169. */
  170. actualTexts = new ArrayList<String>();
  171.  
  172. elements = getDriver().findElements(element);
  173. actualTexts = getTexts(elements);
  174.  
  175. for (int i = 0; i < actualTexts.size(); i++) {
  176. if (actualTexts.get(i).equals(exactText)) {
  177. return elements.get(i);
  178. }
  179. }
  180. return null;
  181. }
  182.  
  183. public String toString() {
  184. return "List of elements located" + elements + "\n should have elements with exact text : " + exactText + "\n while actual texts are " + actualTexts;
  185.  
  186. /*
  187. тут в еррор снова после слова located не то что нужно передаешь... локатор нужно передавать
  188. а не список найденных элементов...
  189. его тожно можно передать куда то - ну в другом месте строки
  190. но я бы пока ограничился только локатором, и так ты плутаешься
  191. */
  192. }
  193. });
  194. }
  195.  
  196. такс, ну вот код выглядит более менее верным, я проблемы не вижу...
  197.  
  198. это нужно смотреть на текст ошибки...
  199.  
  200. в чем именно твоя проблема?
Advertisement
Add Comment
Please, Sign In to add comment