julia_v_iluhina

Untitled

Oct 21st, 2016
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.21 KB | None | 0 0
  1. public abstract class AbstractSmartElement implements SmartElement {
  2.  
  3.     abstract WebElement fetchWrappedEntity();
  4. ....
  5.  @Override
  6.     public WebElement getWrappedEntity() {
  7.  
  8.         WebElement element = fetchWrappedEntity();
  9.         if (element == null) {
  10.             throw new ElementNotFoundException();
  11.         }
  12.         return element;
  13.     }
  14. /*
  15.     ну, мог бы уже и вначале - возле объявления fetchWrappedEntity()
  16.     реализовать и getWrappedEntity()
  17.     вещи связанные и их удобно видеть рядом
  18.  
  19.     реализация - ок
  20.  
  21.     единственное - мог бы и рассказать в рамках вызова исключения - что же
  22.     за элемент не найден
  23.     как раз toString смарт-элемента - будет хорошим описанием
  24.  
  25.     реализуй исключению - конструктор с параметром String message
  26.     http://developer.alexanderklimov.ru/android/java/extends.php
  27.     http://metanit.com/java/tutorial/3.5.php
  28.     https://docs.oracle.com/javase/tutorial/java/IandI/super.html
  29.  
  30.     и тут, при вызове конструктора исключения - передавай toString смарт-элемента
  31. */
  32. **********************************************
  33. public class SmartCollectionIndexElement extends AbstractSmartElement {
  34. ....
  35.     @Override
  36.     public WebElement fetchWrappedEntity() {
  37.           return   parentCollection.getWrappedEntity().get(index) == null ? null : parentCollection.getWrappedEntity().get(index);
  38.  //       return parentCollection.getWrappedEntity().get(index);
  39.     }
  40. /*
  41.     читаем код)
  42.     если такой-то вебэлемент из списка элементов равен нуллу
  43.         то вернуть нулл
  44.         иначе - заново его получить)
  45.  
  46.     пляски с бубном) - побегали по кругу и мозги заплели (не тщательно, но все же)
  47.         во-первых
  48.         мы собственноручно нулл не возвращаем
  49.         в таком случае мы кинем эксепшен
  50.  
  51.         во-вторых - посмотри на реализацию getWrappedEntity() в абстрактном предке
  52.         даже если fetchWrappedEntity() принесет нулл
  53.         то мы там бросим эксепшен
  54.  
  55.         тут нам нужно
  56.             вернуть parentCollection.getWrappedEntity().get(index);
  57.             мы явно нулл не возвращаем - этого достаточно
  58.             мы чего звелись с этой схемой с исключениями вместо нулла
  59.             с целью сделать код проще и надежнее
  60.             это позволит нам кучи проверок не делать в принципе
  61.  
  62.             что тут будет таки полезно (уже не в ключе борьбы с нуллом, а в ключе организации порядка)
  63.             тут return parentCollection.getWrappedEntity().get(index);
  64.             обернуть в try-catch
  65.             c целью поймать IndexOutOfRangeException
  66.             и вместо него - кинуть свой эксепшен SmartСollectionIndexOutOfBoundsException
  67.             тоже - наследника WebDriverException
  68.             цель - чтобы те try-catch, в которых мы сейчас ловим IndexOutOfRangeException и WebDriverException
  69.             были проще (можно будет ловить только WebDriverException) - это мы тоже поправим (ниже будет про это)
  70.             да и в конструктор SmartСollectionIndexOutOfBoundsException - передавай toString смарт-элемента
  71.             это однозначно улучшит и уточнит текст ошибки
  72.             это как раз про картинку http://joxi.ru/52aYKgPsGPGk32 - ты спрашивал
  73. */
  74. *********************************************************
  75. public class SmartElementInnerElement extends AbstractSmartElement {
  76.  
  77.  
  78.     @Override
  79.     public WebElement fetchWrappedEntity() {
  80.         return element.getWrappedEntity().findElement(cssSelector) == null ? null : element.getWrappedEntity().findElement(cssSelector);
  81.   //      return element.getWrappedEntity().findElement(cssSelector);
  82.     }
  83. }
  84. /*
  85.     примерно те же грабли
  86.     верни старую реализацию
  87.     думаю - тут уже подробностей не надо)
  88.  
  89.     то же касается и SmartWebDriverElement
  90.     и SmartWrappedElement
  91. */
  92. ************************************************************
  93. /*
  94.     кстати - не вижу реализованных методов toString для смарт элементов
  95.  
  96.     проверь все смарт-сущности на этот счет
  97.     каждая из них должна внятно про себя рассказывать
  98. */
  99. ***************************************************
  100. public abstract class AbstractCondition<V>  implements Condition<V>, DescribesResult  {
  101. ...
  102.     public V apply(SmartEntity<V> smartEntity)  {
  103.         this.smartEntity = smartEntity;
  104.         V wrappedEntity = smartEntity.getWrappedEntity();
  105.         /*
  106.             у нас в wrappedEntity - будет или не нулл
  107.             или уже вызовется исключение
  108.             по крайней мере - такая реализация у getWrappedEntity() уже должна быть )
  109.         */
  110.         if (wrappedEntity != null) {
  111.         /*
  112.             именно поэтому - и не нужен такой if
  113.             мы досбда просто не дойдем - если ранее нулл назрел)
  114.         */
  115.             return (check(wrappedEntity))?wrappedEntity:null;
  116.          /*
  117.             и тут не надо возвращать нулл
  118.             если проверка прошла - верни wrappedEntity
  119.             иначе - брось исключение WebDriverAssertionException
  120.             тоже - передай ему в конструктор toString (уже кондишена)
  121.          */
  122.         }
  123.         throw new WebDriverAssertionException();
  124.         /*
  125.             это - строчка бессмысленная пока)
  126.             т к по предыдущей - мы вышли из метода = return
  127.  
  128.             с тернарным оператором тут придется расстаться)
  129.         */
  130.     }
  131. *********************************************************
  132.  
  133. public class SmartCollectionFoundByConditionElement extends AbstractSmartElement {
  134. ...
  135. /*
  136.     специально оставила на закуску
  137. */
  138.     @Override
  139.     public WebElement fetchWrappedEntity() {
  140.  
  141.         for (SmartElement smartElement: parentCollection) {
  142.             try {
  143.                 if (condition.apply(smartElement) != null) {
  144.                 /*
  145.                     вспомни - наш apply может вренуть нулл ?
  146.                     он или вернет некое не нулл - значение
  147.                     или упадет
  148.  
  149.                     вопрос - зачем нам теперь такой if?
  150.  
  151.                     достаточно - просто вызвать condition.apply(smartElement)
  152.                     не упал - и нам этого хватает)
  153.                     можно дальше что-то делать
  154.                 */
  155.                     return smartElement.getWrappedEntity() == null ? null : smartElement.getWrappedEntity();
  156.    //                 return smartElement.getWrappedEntity();
  157.                  /*
  158.                     и тут мы - просто, без проверок и бега по кругу
  159.                     вернем smartElement.getWrappedEntity();
  160.                     надеюсь, понятно почему
  161.  
  162.                     если нет - надо таки обсудить этот момент
  163.                  */
  164.                 }
  165.             } catch (IndexOutOfBoundsException | WebDriverException e) {
  166.             /*
  167.                 мы уже перехватили IndexOutOfBoundsException
  168.                 и вместо него бросаем потомка WebDriverException - SmartСollectionIndexOutOfBoundsException
  169.                 так что - тут лови только WebDriverException
  170.  
  171.                 есть еще такие же места в коде - их поправь аналогично
  172.             */
  173.             }
  174.         }
  175.  
  176.         return null;
  177.         /*
  178.             вот так - мы не пишем более нигде
  179.             бросай ElementNotFoundException
  180.             toString этого смарт-элемента - в качестве параметра
  181.         */
  182.     }
  183. }
  184. /*
  185.     подумай - что из реализованного тут надо бы применить
  186.     в SmartFilteredByConditionCollection
  187.  
  188.     см прошлое ревью строки 38-54
  189.     возможно - сообразишь - как реализовать метод is и его применить
  190. */
  191. ***********************************
  192. ну и еще.... я смотрю на свой тест по ТудуМВС - как-то не так оно работает... непойму где но чтото не то
  193. /*
  194.     пока не подправишь выше описанное - тудуэмвиси будет работать как-то не так)
  195.     хороший результат = и тудуэмвиси, и остальные тесты хорошо бегают
  196.  
  197.     не увидела ничего из реализованного для Optimize Speed
  198.    
  199.     пока давай по очереди делать
  200.     нету смысла начинать то - пока тут проблемы
  201. */
Advertisement
Add Comment
Please, Sign In to add comment