Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public boolean is(Condition<WebElement> condition) {
- try {
- condition.check(getWrappedEntity());
- return true;
- /*
- а если condition.check вернет false? )
- почему не return condition.check(getWrappedEntity());
- ?
- */
- } catch (WebDriverException e) {
- }
- return false;
- }
- *******************************
- public static void add(String... taskTexts) {
- for (String text : taskTexts)
- {$("#new-todo").sendKeys(text + Keys.ENTER);}
- }
- /*
- скобочки добавила)
- а почему форматирование - авторское? )
- не забывай реформатировать код
- */
- ***************************************
- public static LazyCollection mails = $$("[role='main'].zA");
- /*
- нам нужны элементы с классом zA
- внутри элемента [role='main']
- где пробел в селекторе?
- */
- ************************************************
- public class ElementRun <V> {
- public static WebElement runCommand(LazyElement element, Condition<WebElement> condition, Command<WebElement> command) {
- return command.run(waitFor(element).until(condition));
- }
- }
- public interface Command <T> {
- <T>T run(T wrappedEntity);
- }
- /*
- http://joxi.ru/D2PDbY1udGYLn2
- давай разбираться)
- уже это всплывало у нас)
- как раз закрепим
- обрати внимание на картинку - <T> в объявлении класса - не подцвечено
- это потому - что в объявлении самого метода - заново объявлен класс <T>
- у тебя задача - чтобы run - возвращал значение того же типа T -
- который мы указали в объявлении самого интерфейса
- то же касается и типа параметра wrappedEntity
- если мы хотим - чтобы метод оперировал тем же T, что и класс
- то
- вместо <T>T run(T wrappedEntity);
- нужно использовать T run(T wrappedEntity);
- вот это <T> вначале объявления метода = это объявление нового типа
- а нам этого в даннном случае этого не надо
- про класс ElementRun
- ты указал - что класс оперирует типом <V>
- но - мы далее - не используем более этот <V>
- на самом деле - далеко не факт, что метод runCommand должен возвращать значение типа WebElement
- если нам только такой тип и нужен - так не надо было никаких дженериков в Command
- но - нам же иногда и строку надо вернуть, и значения других типов -
- мы же собираемся переписать все методы лейзи элемента
- в которых - сначала ждем, потом - что-то делаем (и может быть - что-то возвращаем -
- именно потому нам и нужно для Command использовать дженерик-тип)
- нам нужно - чтобы метод runCommand вернул значение такого типа
- какой тип указан для Command<....>
- и вот тут - нам именно для метода runCommand - надо объявить дженерик-класс
- а вот на уровне класса ElementRun - этого типа не нужно объявлять
- теперь по поводу реализации метода runCommand
- минимально - то, что делал метод лейзи-элемента
- сделает и эта команда
- но - можно ускорить
- попробовать (в try-catch) - выполнить команду без ожидания
- и если возникнет исключение - вот тогда уже - подождать и затем - выполнить команду
- такая реализация дает возможность - не делать ожиданий - там, где они не нужны
- */
- ***************************************
- http://joxi.ru/brRlV57uQg4Kv2
- /*
- в целом - верно
- вот так все и задумывалось
- как поправишь дженерик-типы - не будет и такой проблемой
- смотри - тут WebElement - это уже некий новый тип
- смотри на подцветку
- пока в синтаксисе плпваешь - ориентируйся на такие подсказки
- просто ставь курсор на название типа и смотри - что подцветилось
- */
- *******************************************
- /*
- когда это подправишь - чуть допили класс ElementRun
- переименуй его в WithWaitFor
- реализуй там метод - withWaitFor и метод run
- чтобы вызывать
- withWaitFor(element, condition).run(command)
- цель - заострить внимание
- вот она - команда
- вот он - элемент и кондишен
- схема - та же, что и в WaitFor
- попробуй реализовать)
- */
Advertisement
Add Comment
Please, Sign In to add comment