julia_v_iluhina

Untitled

Sep 19th, 2016
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.76 KB | None | 0 0
  1. public abstract class AbstractCondition<V> implements Condition<V> {
  2.  
  3. /*
  4.     осталось с прошлого раза
  5.  
  6.     В интерфейсе Condition - дженерик-тип ты обозначала как T
  7.     что корректнее с точки зрения конвеншенсов
  8.  
  9.     тут - оно тоже уместнее было бы
  10. */
  11. ************************************
  12.  
  13. http://joxi.ru/ZrJX8Y3f1pznq2
  14.  
  15. /*
  16.     тут тоже - большая и маленькая буквы
  17.     надо привести в чувства
  18. */
  19. **************************************
  20.   public <T> T until(long timeOutInSeconds, Condition<T>... conditions) {
  21. /*
  22.     А зачем тебе заново алгоритм мостить?
  23.  
  24.     уже все реализовано в public <T> T until(Condition<T> condition, long timeOutInSeconds)
  25.     тут - просто переиспользуй его
  26.  
  27.     цель такого метода - вызывать проверки последовательно, аж пока какая-то не упадет
  28.  
  29.     цитата из прошлого ревью - см на сигнатуру метода и пояснения
  30. */
  31.    public <V> V until(Condition<V>... conditions)
  32.     /*
  33.         суть - по очереди для каждого из кондишенов вызываем наш until(Condition<V> condition)
  34.         до тех пор, пока проверки проходят - двигаемся по набору переданных кондишенов
  35.         как только ждущая проверка для кондишена не прошла - дальше не проверяем
  36.     */
  37. ****************************
  38.  
  39. /*
  40.     Можно убрать (или закомментить)
  41.     в pom - кусок про параллелизацию
  42.  
  43.     а в BaseTest - вернуться к использованию BeforeClass & AfterClass
  44.  
  45.     все что нужно для параллелизации - в conciseAPI у нас есть
  46.     при необходимости - все подключишь
  47.  
  48.     сейчас будет быстрее отлаживаться  - когда браузер открывается, все тесты отрабатывают и потом он закрывается
  49. */
  50. ******************************************************************************************************
  51. ******************************************************************************************************
  52. public interface Locator<V> {
  53.     V getWrappedEntity (String cssSelector);
  54. }
  55. /*
  56.     этот интерфейс - начало нашей иерархии
  57.  
  58.     у нас будет иерархия лейзи-сущностей
  59.     часть из них - будет лейзи элементами
  60.     часть - лейзи коллекциями
  61.  
  62.     потому - назовем этот интерфейс LazyEntity
  63.  
  64.     насчет параметра для getWrappedEntity
  65.     он - не нужен)
  66.     метод getWrappedEntity() - расскажет о своей сущности
  67.     у некоторых сущностей будет свойство - локатор
  68.     но это уже - свойство объекта
  69.  
  70.     на уровне этого интерфейса - мы говорим - что каждая лейзи-сущность может нам вернуть свое представление
  71. */
  72. **********************************
  73. http://joxi.ru/DrlQ5oLh4POKOm
  74. /*
  75.     а тут - будут переделки)
  76.  
  77.     пекедж переименуй в entities
  78.     там потом - будут пекеджи element & collection
  79.  
  80.     пока классов мало - можно ограничиться переименованием commands -> entities
  81.  
  82.     из всего надора классов - нам нужны варианты
  83.     LazyElement
  84.     LazyElements (предлагаю его переименовать в LazyCollection - чтоб разница между элементом и коллекцией была поярче)
  85.  
  86.     оба эти класса будут иметь поле By Locator
  87.     и конструкторы этих классов - будут получать локатор
  88.  
  89.     и оба эти класса будут имплементировать интерфейс  LazyEntity
  90.         для LazyElement - LazyEntity<WebElement>
  91.         для LazyCollection - LazyEntity<List<WebElement>>
  92.  
  93.     соответственно - в обоих этих классах будет реализован метод
  94.     getWrappedEntity()
  95.     который по локатору будет возвращать
  96.         элемент (для LazyElement)
  97.         или список элементов (LazyCollection)
  98.        
  99.     и далее - ранее разработанный WaitFor - научи работать не с локатором, а с лейзи-сущностью
  100.     можно использовать для значений типа LazyElement &  LazyCollection -
  101.     тип -  LazyEntity
  102.     т к оба эти класса имплементируют этот интерфейс
  103.  
  104.     соотвественно - из кондишенов - уйдет метод getWrappedEntity
  105.     т к мы будем использовать в работе - такой метод от самой лейзи-сущности
  106.      
  107.     в методах лейзи-элемента
  108.             сначала - ждем видимости
  109.             потом - получаем вебэлемент =  getWrappedEntity()
  110.             и уже у него - выполняем соотвествующее действие
  111. */
Advertisement
Add Comment
Please, Sign In to add comment