julia_v_iluhina

Untitled

Oct 1st, 2016
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.41 KB | None | 0 0
  1. src/main/java/ua/net/itlabs/core/wrappers/element/
  2.  
  3. public class LazyElementAllInnerElementsByLocatorCollection extends AbstractLazyCollection {
  4. /*
  5.     это - коллекция
  6.     значит - в пекедже src/main/java/ua/net/itlabs/core/wrappers/collection
  7.  
  8.     про имя класса
  9.  
  10.     откуда = Element
  11.     уточняем = Inner
  12.     что = Collection
  13.  
  14.     LazyElementInnerCollection - будет ок
  15.  
  16.     реализация - ок
  17.  
  18.     в toString() - вместо find лучше бы использовать findAll
  19. */
  20. ************************
  21.     @Override
  22.     public boolean is(ElementCondition condition) {
  23.         try {
  24.             if (condition.apply(this) != null) {
  25.                 return true;
  26.             }
  27.  
  28.         }
  29.         catch (WebDriverException | IndexOutOfBoundsException e) {}
  30.         return false;
  31.     }
  32.  
  33. /*
  34.     мы уже вместо IndexOutOfBoundsException мы уде вызываем исключение-потомка WebDriverException
  35.  
  36.     потому - тут уже IndexOutOfBoundsException ловить не нужно
  37.  
  38.     попробуй применить condition.check вместо condition.apply
  39.     на пару строк лаконичнее)
  40. */
  41. ***************************
  42. public <V> V until(Condition<V> condition, long timeoutMs) {
  43.   ...
  44.             } catch (WebDriverException | IndexOutOfBoundsException e) {
  45.   ...
  46.   /*
  47.     тут тоже уже можно не ловить IndexOutOfBoundsException
  48.   */
  49. ******************************
  50.  public interface Condition<T> {
  51.  
  52.      T apply(LazyEntity<T> entity);
  53.      boolean check(T wrappedEntity);
  54.  }
  55.  
  56.  /*
  57.      делаем красиво)
  58.  
  59.      сейчас в этом интерфейсе - объявлены методы
  60.          служащие как для принятия решения - прошли-не прошли
  61.          так и для получения результата ожидания
  62.  
  63.      нарушаем Single Responsibility Principle )
  64.  
  65.      реализуй интерфейс Matcher <T> с объявленным методом boolean check(T wrappedEntity);
  66.  
  67.      а в Condition <T> - останется apply
  68.      Condition <T> - отнаследуй от Matcher <T>
  69.  */
  70. ********************************
  71.  http://joxi.ru/12MDGYXu4DJZzm
  72.  /*
  73.     еще чуть разгрузить пекедж можно)
  74.  */
  75. **************************************
  76.  
  77. public class SizeOf extends AbstractCollectionCondition {
  78.     protected int listSize;
  79.     protected int expectedSize;
  80.  
  81. /*
  82.     просмотри имена кондишенов (и классов, и методов для их вызовов)
  83.     когда мы вызывали кондишены sizeOf(elementsLocator, 2)
  84.     Of - был уместен
  85.     теперь - при вызове sizeOf(2) - Of - уже лишний)
  86.  
  87.     просмотри и другие кондишены на этот предмет)
  88.  
  89.     насчет использования модификатора доступа protected
  90.  
  91.         есть такая точка зрения, что использовать protected - это самообман
  92.         т к в рамках потомков можно для отнаследованного protected-метода
  93.         этот метод сделать публичным
  94.  
  95.         когда мы использовали protected, мы хотели, чтобы что-то было с возможностью наследования
  96.         и не хотели его внешнего использования.
  97.         а кто-то отнаследовался от нашего класса и объявил это как public
  98.         и вот то, что мы прятали внутри класса - уже "торчит" наружу
  99.  
  100.         есть good practice - избегать применения protected
  101.         то, что мы что-то объявим внутри класса-кондишена как public
  102.         не будет нам особо мешать при работе с нашим фреймворком
  103.         т к в итоге - используем для кондишена тип интерфейс,
  104.         и это позволит не светить нашими публичными переменными/методами
  105.         когда будем юзать фреймворк
  106.  
  107.         идеально про протектед-методы
  108.             http://programmers.stackexchange.com/questions/162643/why-is-clean-code-suggesting-avoiding-protected-variables
  109.             http://joxi.ru/52akqzoUGnqYGr
  110.  
  111.             http://stackoverflow.com/questions/3631176/why-are-many-developers-opposed-to-using-the-protected-modifier-in-oop
  112.             http://stackoverflow.com/questions/37011/should-you-ever-use-protected-member-variables
  113.             http://stackoverflow.com/questions/4913025/reasons-to-use-private-instead-of-protected-for-fields-and-methods
  114.  
  115.             http://www.javalobby.org/java/forums/t77911.html
  116.  
  117.     Просмотри весь проект, перейди на использование public
  118. */
  119. ********************************************
  120. public static final ElementCondition visible = new Visible();
  121. ...
  122. //    public static ElementCondition visible() {
  123. //        return new Visible();
  124. //    }
  125.  
  126. /*
  127.     по идее - так конечно короче)
  128.  
  129.     но - не так уж и хорошо)
  130.  
  131.     Тут есть такая тонкость)
  132.  
  133.     мы создали статические переменные = объект-кондишен
  134.  
  135.     и используем их в проекте, который поддерживает параллелизацию
  136.  
  137.     если мы в параллельных тестах будем использовать ОДИН объект-кондишен ОДНОВРЕМЕННО
  138.     могут возникать странные ошибки
  139.  
  140.     чтобы избежать этого
  141.     вместо переменных стоит использовать методы
  142.     тогда для каждого вызова кондишена мы будем использовать свой объект
  143.     и таких проблем не будет
  144.  
  145.     вариант с методом - грамотнее)
  146.    
  147.     вернись к варианту с методом)
  148. */
Advertisement
Add Comment
Please, Sign In to add comment