julia_v_iluhina

Untitled

Nov 30th, 2016
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.47 KB | None | 0 0
  1.     @Override
  2.     public boolean is(Condition<WebElement> condition) {
  3.         return condition.check(this);
  4.     }
  5. /*
  6.     тут тоже try-catch нужен
  7.     и передавай сразу getWrappedEntity() как параметр
  8. */
  9. **********************
  10. public class LazyElementInnerElement extends AbstractLazyElement {
  11. ....
  12.     @Override
  13.     public WebElement fetchWrappedEntity() {
  14.         return parentElement.getWrappedEntity() == null ? null : parentElement.getWrappedEntity().findElement(locator);
  15.     }
  16. /*
  17.     не надо нам вот этих проверок
  18.  
  19.     ведь  родительский getWrappedEntity() - не вернет нулл
  20.     он вызовет эксепшен вместо этого
  21.  
  22.     тут делай просто parentElement.getWrappedEntity().findElement(locator);
  23.  
  24.     правило - мы сами не возвращаем null (речь про явный возврат нулла)
  25.     но и лишних проверок не надо
  26.     ведь на уровне абстрактного класса в getWrappedEntity() - мы проверяем  это и если что - кидаем эксепшен
  27.    
  28.     и тут - LazyElementInnerCollection - аналогично
  29. */
  30. ***************************************
  31. public class LazyCollectionNthElement extends AbstractLazyElement {
  32.  
  33.     ...
  34.     @Override
  35.     public WebElement fetchWrappedEntity() {
  36.         if (parentCollection.getWrappedEntity() == null) {
  37.             throw new LazyСollectionIndexOutOfBoundsException();
  38.         }
  39.         return parentCollection.getWrappedEntity().get(index);
  40.     }
  41. /*
  42.     тут - тоже
  43.     не анализируй parentCollection.getWrappedEntity()
  44.     нулла не будет (вместо него - будет вызван эксепшен)
  45.  
  46.     а вот окружить parentCollection.getWrappedEntity().get(index);
  47.     секцией try-catch
  48.     чтоб словить IndexOutOfBoundsException
  49.     чтоб в случае такого эксепшена - бросить уже наш = LazyСollectionIndexOutOfBoundsException()
  50.  
  51.     кстати - передавай в конструкторы наших эксепшенов - пояснения
  52.     лучше this.toString() - сложно что-то придумать
  53.  
  54. */
  55. ****************************************
  56. public class LazyCollectionFoundByConditionElement extends AbstractLazyElement {
  57.  
  58. ......
  59.  
  60.     @Override
  61.     public WebElement fetchWrappedEntity() {
  62.         List<WebElement> elementList = parentCollection.getWrappedEntity();
  63.         for (WebElement webElement : elementList) {
  64.             if (condition.check(webElement)) {
  65.                 return webElement;
  66.             }
  67.         }
  68.         return null;
  69.         /*
  70.             мы нулл не возвращаем
  71.  
  72.             бросай ElementNotFoundException()
  73.             передавай в конструктор наших эксепшена - this.toString()
  74.         */
  75.     }
  76. ***********************************************
  77.     public abstract class AbstractCondition<V> implements Condition<V> {
  78.  
  79.   ...
  80.         public V apply(LazyEntity<V> lazyEntity) {
  81.            ...
  82.             if (!check(entity)) {
  83.                 throw new WebDriverAssertionException();
  84.             }
  85.         /*
  86.             тоже - this.toString() - будет ок в качестве параметра
  87.         */
  88. ***********************************************
  89. public interface Matcher<V> {
  90.     boolean check(V entity);
  91. }
  92. ...
  93.  
  94. public class WaitFor {
  95.  
  96.     ....
  97.     public <V> V until(Condition<V>... conditions){
  98. /*
  99.         когда применять V
  100.         а когда  - T
  101.  
  102.         http://stackoverflow.com/questions/6008241/java-generics-e-and-t-what-is-the-difference
  103.  
  104.         когда типизируешь generic-типом класс (или интерфейс) - то T (T is meant to be a Type)
  105.  
  106.         а когда речь идет о типизации значения, возвращаемого методом -  V (V is Value (as a return value or mapped value))
  107.  
  108.         т е - в interface Matcher<V>  = правильно = T is meant to be a Type
  109.  
  110.         а вот в   public <V> V until - как раз V правильно
  111.         т к V - это тип возвращаемого значения
  112.  
  113.         это и к остальным местам использования generic-ов примени
  114. */
Advertisement
Add Comment
Please, Sign In to add comment