julia_v_iluhina

Untitled

Jan 13th, 2017
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.46 KB | None | 0 0
  1. public static ExpectedCondition<WebElement> conditionToWaitParentElement(final By locator, final String text) {
  2. /*
  3.     очень странное имя для кондишена
  4.  
  5.     для метода $(ExpectedCondition<WebElement> conditionToWaitElement)
  6.     имя параметра - вполне ок
  7.     т к мы вообще-то - можем разные кондишены использовать для вызова такого метода
  8.     тут - для $(ExpectedCondition<WebElement> conditionToWaitElement)
  9.     мы рассуждаем исходя из контекста этого метода
  10.  
  11.     а при реализации конишена - надо быть уже точным
  12.     и оперировать теми терминами - которые уже для кондишена применимы
  13.     забыли про то где будем кондишен вызывать
  14.     и думаем - что он проверяет
  15.  
  16.     а проверяет он - есть ли в списке элемент с нужным нам текстом
  17.     я писала - какая сигнатура должна быть у кондишена (пример)
  18.     ExpectedCondition<WebElement> elementWithText(final By elementsLocator, final String exactText)
  19. */
  20.         return elementExceptionsCatcher(new ExpectedCondition<WebElement>() {
  21.             String actualText;
  22.  
  23.             public WebElement apply(WebDriver webDriver) {
  24.  
  25.                 ...
  26.                 /*
  27.                     по реализации
  28.                     что мы хотим
  29.                     мы хотим проверить
  30.                     есть ли в списке элемент с нужным нам текстом
  31.  
  32.                     потому - будем оперировать всеми текстами элементов
  33.  
  34.                     у тебя уже есть кондишен textsOf
  35.                     в котором мы сначала - собираем список всех текстов элементов и потом их анализируем
  36.                     тут - тоже нужно собрать список текстов элементов
  37.  
  38.                     а вот анализ будет немного не такой
  39.                     что нам нужно
  40.                     дано - список текстов
  41.                     надо узнать - есть ли в списке текстов нужный нам текст
  42.                     если есть - нужно вернуть вебэлемент который соответствует найденному тексту
  43.                     (если мы нашли в списке текстов нужный нам текст по индексу 5,
  44.                     то и вебэлемент из списка вебэлементов - нужно получить по индексу 5)
  45.  
  46.                      а если мы обошли весь список текстов
  47.                      и нужного теста не нашли -
  48.                      то возвращаем нулл
  49.                 */
  50.             }
  51.  
  52.             public String toString() {
  53.                 ...
  54.                 /*
  55.                     как обычно описываем
  56.                     что проверяли
  57.                     для чего проверяли
  58.                     что ожидали
  59.                     что было в реальности
  60.  
  61.                     от этой схемы - не отходи
  62.                     и ни в коем случае не надо писать в toString кондишена
  63.                     что что-то там не нашлось
  64.  
  65.                     toString любого объекта - описывает этот объект
  66.                     и ничего более
  67.                     кондишен точнее всего описывается по схеме - что я выше привела
  68.  
  69.                     Element of list located ....
  70.                     Should have exact text ....
  71.                     While actial texts are ...
  72.  
  73.                      да, и тут - будет полезно вывести все фактические тексты списка
  74.                 */
  75. *************************************************************
  76. public static ExpectedCondition<List<WebElement>> exactTextsOf(final By elementsLocator, final String... texts) {
  77. /*
  78.     тут - все верно
  79.  
  80.     уже не в одном кондишене - нам нужно получать список текстов
  81.  
  82.     реализуй в неком классе Heplers
  83.     универсальный статический метод
  84.  
  85.     List<String> getTexts(List<WebElement> elements)
  86.     и используй єтот метод в кондишенах
  87.  
  88.     код станет лаконичнее
  89. */
  90. *******************************************
  91. public static ExpectedCondition<List<WebElement>> exactTextsOfVisible(final By elementsLocator, final String... texts)
  92. /*
  93.     а тут - после получения списка вебэлементов
  94.     сначала - перебери его с целью получить другой список - только видимых вебэлементов
  95.  
  96.     все очень похоже на получение списка текстов
  97.     только теперь мы формируем список вебэлементов
  98.     обходим в цикле наш список - for (WebElement element : elements)
  99.     и если элимент видим (element.isDisplayed)
  100.     то помещаем его в результирующий список
  101.  
  102.     поскольку список видимых вебэлементов - нужно будет получать еще в одном кондишене
  103.     тоже вынеси это в отдельный метод в Heplers
  104.     List<WebElement> getVisibleElements(List<WebElement> elements)
  105.  
  106.     и используй его в кондишенах
  107.  
  108.     тут - получишь такую последовательность действий
  109.     сначала - получи список вебєлементов по локатору
  110.     потом - по этому списку - список видимых вебэлементов
  111.     затем - уже по списку видимых вебэлементов - получай список текстов (получишь тексты именно видимых вебэлементов)
  112.     а дальше - все аналогично  exactTextsOf
  113.     только в toString уточнить - что проверяем тексты именно видимых элементов
  114. */
  115. ****************************************
  116. public static ExpectedCondition<Boolean> emptySizeOf(final By elementsLocator) {
  117. /*
  118.     универсальнее - сделать вот так
  119.     оставить кондишен
  120.     public static ExpectedCondition<Boolean> sizeOf(final By elementsLocator, final int expectedSize)
  121.  
  122.     и реализовать
  123.     public static ExpectedCondition<Boolean> emptyOf(final By elementsLocator) {
  124.         return sizeOf(elementsLocator, 0);
  125.     }
  126.  
  127.     или вообще не реализовывать emptyOf
  128.     а проверять с помощью sizeOf - что размен равен нулю
  129.     что мы получим при такой реализации
  130.     у нас будет универсальный кондишен sizeOf
  131.     который применим в бОльшем количестве случаем
  132.     и второй кондишен - emptyOf - который мы не разрабатывали с нуля, а в нем переиспользовали sizeOf
  133.  
  134.     мне не нравится имя  emptyOf
  135.     потому я бы не стала реализовывать такой кондишен)
  136.     тем более - в вызовах
  137.         assertThat(sizeOf(tasks, 0))
  138.         assertThat(emptyOf(tasks))
  139.     отличий не так и много )
  140.  
  141.     ну то уже субъективно
  142.     можно и так и так -
  143.         или пара sizeOf + emptyOf
  144.         или один универсальный sizeOf
  145. */
  146. ****************************************
  147. public static ExpectedCondition<Boolean> minimumSizeOfVisible(final By elementsLocator, final int expectedSize) {
  148. /*
  149.     тут - похоже действуй
  150.     как в exactTextsOfVisible
  151.     собери список видимых элементов
  152.     и проанализируй его размер
  153.  
  154.     только теме нужен - не minimumSizeOfVisible
  155.     а sizeOfVisible ( с логикой похожей на sizeOf)
  156. */
  157. *************************************************
  158. /*
  159.     еще - не хватает
  160.      ExpectedCondition<WebElement> elementWithCssClass(final By elementsLocator, final String cssClass)
  161.      
  162.     далее - код не смотрела
  163.     давай пока с кондишенами разберемся
  164.     перед разговором со мной, о котором мы договаривались
  165.     постарайся проработать это ревью
  166.     чтоб мы уже новые вопросы разбирали а не эти же
  167. */
Advertisement
Add Comment
Please, Sign In to add comment