julia_v_iluhina

Untitled

Oct 21st, 2016
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.83 KB | None | 0 0
  1. public class WithWaitFor<T> {
  2.  
  3.     ...
  4.     private WebElement element;
  5.     /*
  6.         нам нужна эта переменная?
  7.     */
  8.     public WithWaitFor(LazyEntity<T> entity, Condition<T> condition) {
  9.     /*
  10.         Мы собираемся использовать этот класс для коллекций?
  11.         нет
  12.         Т е - нам нужен такой класс только и исключительно  - для лейзи элементов
  13.         и ждем мы - только и исключительно - Condition<WebElement>
  14.  
  15.         вопрос - зачем нам <T> - на уровне класса?
  16.         вопрос - почему сразу мы не оперируем LazyElement element &  Condition<WebElement> condition ?
  17.     */
  18.  
  19.  
  20.     public WebElement run(Command<WebElement> command) {
  21.     /*
  22.         Вспоминай  - что это за тип мы указываем для Command
  23.         это - тип значения, которое вернет command.run
  24.  
  25.         вопрос - нам всегда нужен Command<WebElement>?
  26.         а как тогда реализовать getTagName(), например?
  27.         как нам в таком случае использовать класс WithWaitFor?
  28.  
  29.         жестко задав для метода run тип параметра Command<WebElement>
  30.         мы сразу лишаемся нужных нам возможностей
  31.  
  32.         generics применять надо там, где есть варианты
  33.         на уровне класса и конструктора - у нас вариантов нет
  34.         а вот на уровне метода run - еще как есть
  35.     */
  36.         try {
  37.             return command.run((WebElement) entity.getWrappedEntity());
  38.             /*
  39.                 а оперировала бы более подходящим LazyElement element - не пришлось бы
  40.                 тип приводить)
  41.             */
  42.         } catch (WebDriverException e) {
  43.         }
  44.         return command.run((WebElement) waitFor(entity).until(condition));
  45.         /*
  46.             и тут бы не пришлось тип приводить - будь у нас Condition<WebElement>
  47.         */
  48.     }
  49. }
  50. *********************************************
  51.     @Override
  52.     public LazyElement doubleClick() {
  53.         new WithWaitFor(this, visible()).run(new Command<WebElement>() {
  54.             @Override
  55.             public WebElement run(WebElement element) {
  56.                 actions().doubleClick(getWrappedEntity()).perform();
  57.                 /*
  58.                     у метода run - есть параметр element
  59.                     вспомни - как мы вызываем этот метод run в WithWaitFor.run
  60.                     и что ему передаем в command.run
  61.                     как раз и передаем ему getWrappedEntity()
  62.  
  63.                     потому - тут не надо уже вызывать getWrappedEntity()
  64.                     тут, в реализации run команды - оперируй параметром метода = element
  65.                 */
  66.                 return element;
  67.             }
  68.         });
  69.         return this;
  70.     }
  71. /*
  72.     чтобы убедиться - что все ок получилось
  73.     переделай все методы AbstractLazyElement, в которых ты сначала ждешь, а потом что-то делаешь
  74.     на вариант с WithWaitFor
  75.  
  76.     обращай внимание на то - что если метод что-то возвращает
  77.     то нужно обеспечить это и при использовании WithWaitFor
  78.     проверь это например на варианте
  79.         elements = $$(...).shouldHave(exactTexts(...));
  80.         for(LazyElement element:elements) {
  81.             System.out.println(element.getText());
  82.         }
  83.     ну или какой-то другой метод для element вызывай -
  84.     тот, который вызывает сомнения или подозрения
  85.     оставь такой метод в новом тест-классе MySeleniumFrameWorkTest
  86.  
  87.     попробуй прийти к варианту
  88.     withWaitFor(element, condition).run(command)
  89.  
  90.     сейчас у тебя -
  91.     new WithWaitFor(element, condition).run(command)
  92.  
  93.  
  94.     подсмотри идеи в WaitFor
  95. */
  96. *************************
  97. /*
  98.     если останутся вопросы
  99.     то фиксируй их хоть в гугл-доке
  100.     хоть в pastebin-е
  101.     и давай линку к следующему ревью
  102.  
  103.     надо уже все точки над і расставить)
  104. */
Advertisement
Add Comment
Please, Sign In to add comment