julia_v_iluhina

Untitled

Oct 2nd, 2016
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.88 KB | None | 0 0
  1. public static LazyElement $(By locator) {
  2.         return new LazyWebDriverElement();
  3. }
  4. /*
  5.     интересно)
  6.     а как лейзи-элемент узнает - как искать вебэлемент
  7.  
  8.     мы локатор - не передали лейзи-элементу
  9.     а чтоб передать - конструктор надо реализовать в классе LazyWebDriverElement
  10.  
  11.     также - и для $$ с лейзи-коллекцией
  12. */
  13. ******************************
  14. ListNthElementHasText...
  15.  
  16.     @Override
  17.     public boolean check(List<WebElement> elements) {
  18.         ...
  19.         return (!actualText.contains(expectedText));
  20.     }
  21.  
  22. /*
  23.     т е - нас устроит - когда текст элемента НЕ содержит текст ?
  24.  
  25.     check - должен вернуть true - если проверка прошла
  26. */
  27. *****************************************
  28. с ног уже сбилась в поисках - C:\testing\seleniumtest\src\main\java\core\WaitFor.java
  29. Error:(26, 43) java: incompatible types: java.lang.Object cannot be converted to T
  30. и всё тут
  31.  
  32. /*
  33.     я приведу подправленный код и прокомментирую
  34.     ты - попробуй разобраться
  35.  
  36.     http://joxi.ru/Vrwqg81HKnEgB2 - Идея подцвечивает один generic type
  37.     достаточно курсор переместить на этот тип - остальные его упоминатия подцветятся
  38.     так можно себя контролировать)
  39. */
  40. public class WaitFor<T> {
  41. /*
  42.     это уже следствие - что нам нужно объявить тип с <T>
  43. */
  44.     private LazyEntity<T> entity;
  45.     /*
  46.         раз мы в Condition <T>
  47.         объявили T apply(LazyEntity <T> entity);
  48.         значит - и тут нам надо оперировать LazyEntity <T> для entity
  49.        
  50.         а раз так = надо тут объявить entity как LazyEntity <T>
  51.         как следствие - и в параметре конструктора - тоже будем оперировать таким же типом
  52.         как следствие - и класс так объявим
  53.        
  54.         еще - очень важно
  55.         это - не статическое поле
  56.         нам это не надо - мы же until - вызовем у объекта WaitFor, а не у класса
  57.        
  58.     */
  59.  
  60.  
  61.     public WaitFor(LazyEntity<T> entity) {
  62.         this.entity = entity;
  63.     }
  64.     /*
  65.         подправили тип параметра
  66.     */
  67.  
  68.     public static <T> WaitFor<T> waitFor(LazyEntity<T> entity) {
  69.         return new WaitFor(entity);
  70.     }
  71.     /*
  72.         для этого статического метода - мы объявляем другой  <T>
  73.         посмотри - что будет подцвечиваться для этого <T>
  74.        
  75.         т к этот метод мы вызываем и создаем объект типа  WaitFor<T>
  76.         то тут - мы как раз в описании оттталкиваемся от ноъявления <T> для метода
  77.        
  78.         говорим =
  79.         <T>  = метод оперирует дженерик-типом <T>
  80.         WaitFor<T> = возвращает он значение типа WaitFor<T>
  81.         (LazyEntity<T> entity) = оперируя параметром типа LazyEntity<T>
  82.        
  83.         такой метод мог бы быть реализован и вне класса WaitFor
  84.         и в реализации этого метода - мы оперируем другим <T> (не тем, который объявлен при объявлении класса)
  85.         другим - в том смысле - что не <T> из объявления класса нам объясняет логику использования дженерика в методе
  86.         а наоборот - <T> из объявления метода - объясняет логику использования дженерика в методе
  87.          
  88.         да - этот метод - статический
  89.         цель - вызвать его для создания объекта (чуть экономим - waitFor(...) вместо new WaitFor(...))
  90.          
  91.     */
  92.  
  93.     public T until(Condition <T> condition, long timeout) {
  94.     /*
  95.         а вот этот метод - не статический
  96.         т к мы вызываем его у объекта типа waitFor
  97.        
  98.         waitFor(...) - вернул нам объект
  99.         waitFor(...).until - вызвали метод у объекта
  100.     */
  101.         Throwable lastError = null;
  102.         long startTime = System.currentTimeMillis();
  103.  
  104.         do {
  105.             try {
  106.                 T result = condition.apply(entity);
  107.                 /*
  108.                     и тогда тут тоже проблем не возникнет
  109.                 */
  110. ...
  111.  
  112.     public T until(Condition<T> condition) {
  113. /*
  114.     тоже - метод не статический
  115. */
  116.     private void sleep(long milliseconds) {
  117.     /*
  118.         да и этому - теперь незачем быть статическим
  119.     */
  120.    
  121. /*
  122.     думаю, такая версия - лучшая
  123.    
  124.     можно было конечно на уровне Condition <T>
  125.     объявить T apply(LazyEntity entity);
  126.     и потом приводить результат вызова apply к нужному типу..
  127.    
  128.     в твоем варианте - получится все однозначнее
  129.     это всегда лучше
  130. */  
  131. /*
  132.     глубже не копала еще
  133.     только самый минимум
  134. */
Advertisement
Add Comment
Please, Sign In to add comment