Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class WithWaitFor<T> {
- ...
- private WebElement element;
- /*
- нам нужна эта переменная?
- */
- public WithWaitFor(LazyEntity<T> entity, Condition<T> condition) {
- /*
- Мы собираемся использовать этот класс для коллекций?
- нет
- Т е - нам нужен такой класс только и исключительно - для лейзи элементов
- и ждем мы - только и исключительно - Condition<WebElement>
- вопрос - зачем нам <T> - на уровне класса?
- вопрос - почему сразу мы не оперируем LazyElement element & Condition<WebElement> condition ?
- */
- public WebElement run(Command<WebElement> command) {
- /*
- Вспоминай - что это за тип мы указываем для Command
- это - тип значения, которое вернет command.run
- вопрос - нам всегда нужен Command<WebElement>?
- а как тогда реализовать getTagName(), например?
- как нам в таком случае использовать класс WithWaitFor?
- жестко задав для метода run тип параметра Command<WebElement>
- мы сразу лишаемся нужных нам возможностей
- generics применять надо там, где есть варианты
- на уровне класса и конструктора - у нас вариантов нет
- а вот на уровне метода run - еще как есть
- */
- try {
- return command.run((WebElement) entity.getWrappedEntity());
- /*
- а оперировала бы более подходящим LazyElement element - не пришлось бы
- тип приводить)
- */
- } catch (WebDriverException e) {
- }
- return command.run((WebElement) waitFor(entity).until(condition));
- /*
- и тут бы не пришлось тип приводить - будь у нас Condition<WebElement>
- */
- }
- }
- *********************************************
- @Override
- public LazyElement doubleClick() {
- new WithWaitFor(this, visible()).run(new Command<WebElement>() {
- @Override
- public WebElement run(WebElement element) {
- actions().doubleClick(getWrappedEntity()).perform();
- /*
- у метода run - есть параметр element
- вспомни - как мы вызываем этот метод run в WithWaitFor.run
- и что ему передаем в command.run
- как раз и передаем ему getWrappedEntity()
- потому - тут не надо уже вызывать getWrappedEntity()
- тут, в реализации run команды - оперируй параметром метода = element
- */
- return element;
- }
- });
- return this;
- }
- /*
- чтобы убедиться - что все ок получилось
- переделай все методы AbstractLazyElement, в которых ты сначала ждешь, а потом что-то делаешь
- на вариант с WithWaitFor
- обращай внимание на то - что если метод что-то возвращает
- то нужно обеспечить это и при использовании WithWaitFor
- проверь это например на варианте
- elements = $$(...).shouldHave(exactTexts(...));
- for(LazyElement element:elements) {
- System.out.println(element.getText());
- }
- ну или какой-то другой метод для element вызывай -
- тот, который вызывает сомнения или подозрения
- оставь такой метод в новом тест-классе MySeleniumFrameWorkTest
- попробуй прийти к варианту
- withWaitFor(element, condition).run(command)
- сейчас у тебя -
- new WithWaitFor(element, condition).run(command)
- подсмотри идеи в WaitFor
- */
- *************************
- /*
- если останутся вопросы
- то фиксируй их хоть в гугл-доке
- хоть в pastebin-е
- и давай линку к следующему ревью
- надо уже все точки над і расставить)
- */
Advertisement
Add Comment
Please, Sign In to add comment