julia_v_iluhina

Untitled

Oct 19th, 2016
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.53 KB | None | 0 0
  1. public class Configuration {
  2.     public static long timeout = 10;
  3. }
  4. /*
  5.     в самом классе  Configuration
  6.     пропиши более универсальное значение (4 с будет ОК для многих приложений)
  7.     а уже в тест-классе - переустанови таймаут на нужное тебе значение
  8.  
  9.     ты в решении этой же задачи на Selenide - ты подобное делала уже
  10.     http://joxi.ru/brRlV57uQgdxo2
  11.     учти только, что теперь таймаут измеряется в секундах
  12. */
  13. ********************************
  14. public static <V> ExpectedCondition<V> elementExceptionsCatcher(final Function<? super WebDriver, V> condition) {
  15.    ...
  16.                 } catch (StaleElementReferenceException | IndexOutOfBoundsException ex) {
  17.                     return null;
  18.                 } catch (ElementNotVisibleException ex) {
  19.                     return null;
  20.                 }
  21. /*
  22.     это можно свернуть в одну catch-секцию
  23.     ты уже применяешь это - StaleElementReferenceException | IndexOutOfBoundsException
  24.     для третьего типа исключения тоже так делай
  25. */
  26. ***********************************************************
  27. public static ExpectedCondition<Boolean> listNthElementHasText(final List<WebElement> elements, final int index, final String expectedText){
  28.         return new ExpectedCondition<Boolean>() {
  29.             ...
  30.             public Boolean apply(WebDriver driver) {
  31.                     try {
  32.                         ...
  33.                         return Boolean.valueOf(elementText.contains(expectedText));
  34.                         /*
  35.                             можно обойтись без явного приведения типов
  36.                             return elementText.contains(expectedText);
  37.                             вот так тоже будет ок
  38.                             http://stackoverflow.com/questions/3728616/boolean-vs-boolean-in-java
  39.                             см вот этот кусочек http://joxi.ru/Q2KpJYOs95GDlA
  40.                         */
  41.                     } catch (StaleElementReferenceException | IndexOutOfBoundsException ex) {
  42.                         return false;
  43.                     }
  44.                     /*
  45.                         а тут - почему elementExceptionsCatcher не применяешь?
  46.                         стоит это применить во всех кондишенах
  47.                         и убрать из них try-catch секции
  48.                     */
  49. ************************************************************
  50. public static ExpectedCondition<List<WebElement>> textsOf(final List<WebElement> elementList, final String... expectedTexts){
  51.         ...
  52.                 actualTexts.clear();
  53.                 for (WebElement element : elementList) {
  54.                     actualTexts.add(element.getText());
  55.                 }
  56.                 ...
  57.                 if (elementList.size() != expectedTexts.length){
  58.                     return null;
  59.                 }
  60.                 for (int i = 0; i < expectedTexts.length; i++) {
  61.                     if (!elementList.get(i).getText().contains(expectedTexts[i])){
  62.                     /*
  63.                         выше - мы специально собрали тексты элементов в список actualTexts
  64.                         правильнее далее по коду оперировать им -
  65.                         его элементы сравнивать с ожидаемыми текстами
  66.                         его размер сравнивать с количеством ожидаемых текстов
  67.  
  68.                         важно - чтобы на протяжении всего кода apply
  69.                         мы с одним и тем же работали
  70.  
  71.                         мы работаем с лейзи прокси списком elementList
  72.                         он может снова измениться к моменту, когда
  73.                         ты начнешь получать его размер или текст элемента
  74.                        
  75.                         вот получим мы уже измененное значение elementList.get(i).getText()
  76.                         сделаем на этом основании выводы
  77.  
  78.                         а потом в toString расскажем про ранее сохраненные тексты
  79.                         а не про то, на основании чего делали выводы
  80.                         и можно долго думать - в чем же дело)
  81.  
  82.                         т е - после того - как получили actualTexts
  83.                         мы ничего уже не будем получать у elementList
  84.                         ни размера, ни текстов элементов
  85.                         все это уже есть и у actualTexts
  86.  
  87.                         мы лишь вернем elementList
  88.                         в случае успешно пройденной проверки
  89.                     */
  90.  ...
  91.             @Override
  92.             public String toString() {
  93.                 return String.format("text in element list should be:\n" + Arrays.toString(expectedTexts.clone()) + "\nWhile actual is:\n" + Arrays.toString(actualTexts.toArray()).replace("\n", " "));
  94.             }
  95.             /*
  96.                 а для чего Arrays.toString(expectedTexts.clone())?
  97.                 можно ведь проще - Arrays.toString(expectedTexts)
  98.  
  99.                 Arrays.toString(actualTexts.toArray()).replace("\n", " ")
  100.                 не стоит искажать факт
  101.                 ну да, содержат тексты элементов переходы на другую строку
  102.                 это может быть важно для анализа ошибки
  103.                 выведи ровно то - что есть по факту
  104.                 это будет максимально корректно
  105.             */
  106.  **************************************************
  107.  
  108.     public List<WebElement> $$(By locator){
  109.         return assertThat(visibilityOfAllElementsLocatedBy(locator));
  110.     }
  111.  
  112. /*
  113.     писала про это в http://pastebin.com/2sT6aj3w
  114.     строки 31-34
  115.     ты было эти 2 метода закомментила
  116.     теперь - раскомментила)
  117.  
  118.     посмотри  - как устроен visibilityOfAllElementsLocatedBy
  119.     в большинстве случаев он мало чему поможет
  120.  
  121.     да и вообще - для списка еще неизвестно - чего правильно будет подождать
  122.     пока нам этот метод не нужен
  123.     можно просто удалить методы $$
  124. */
  125. ***********************************
  126.     public void assertNthMail(int index, String mailText){
  127.         assertThat(listNthElementHasText(mails, index, mailText), Configuration.timeout);
  128.     }
  129. /*
  130.     тут достаточно вызвать assertThat(listNthElementHasText(mails, index, mailText));
  131.     вспомни - как работает assertThat с одним параметром
  132. */
Advertisement
Add Comment
Please, Sign In to add comment