Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public <X> X getScreenshotAs(OutputType<X> target) throws WebDriverException {
- return getWrappedEntity().getScreenshotAs(target);
- }
- /*
- тут тоже жди видимости
- */
- ********************
- @Override
- public LazyElement pressEnter() {
- waitFor(this).until(visible());
- getWrappedEntity().sendKeys(Keys.ENTER);
- return this;
- }
- @Override
- public LazyElement pressEscape() {
- waitFor(this).until(visible());
- getWrappedEntity().sendKeys(Keys.ESCAPE);
- return this;
- }
- /*
- тут, кстати, проще переиспользовать this.sendKeys()
- в нем же уже все есть)
- экономия на спичках, конечно
- но все же)
- */
- *********************************
- public abstract class AbstractLazyCollection implements LazyCollection {
- /*
- набор и сигнатура методов - ок
- тут тоже надо @Override использовать
- */
- *****************************
- public LazyElement get(int index) {
- waitFor(this).until(minimumSizeOf(index + 1));
- return new LazyWrappedWebElement(getWrappedEntity().get(index));
- }
- /*
- не)
- мы тут хитрее поступим)
- во-первых - не будем ничего ждать)
- во-вторых - создадим еще один класс - LazyCollectionNthElement - нн-ый элемент коллекции
- конструктор которого принимает родительскую лейзи-коллекцию и индекс элемента
- и это - используй в реализации getWrappedEntity() этого нового класса
- у родительской лейзи-коллекции - тоже можно вызвать getWrappedEntity()
- получим - список вебэлементов
- и у него - по индексу - получим искомый вебэлемент
- в результате - как и ранее - оперировать вебэлементами (или списками вебэлементов)
- мы насинаем не раньше работы с getWrappedEntity()
- а до этого - просто запоминаем - как что искать
- не забудь про toString() для нового класса
- он должен отразить и информацию о родительской коллекции, и информацию о индексе
- постарайся формулировать полаконичнее
- конечно - не в ущерб точности
- и в методе get - создай новый объект класса LazyCollectionNthElement
- и на этом все)
- про то, почему не нужно ничего ждать в get
- в get - мы просто создалим новый элемент лейзи-семейства = рассказ, как искать то, что нам нужно
- а когда дело дойдет до работы с реальными вебэлементами/списками вебэлементов - мы вызываем некую
- ждущую проверку
- в которой для нашего элемента будет вызван getWrappedEntity()
- который в свою очередь - получит вебэлемент (может - и путем вызова getWrappedEntity() родительской сущности)
- все эти действия - у нас выполняются в try-catch
- потому - даже если индекс выйдет за границы - мы все это поймаем и еще подождем
- и только если нам таймаута не хватит - тест упадет
- и расскажет - почему
- */
- *********************************************************
- public Iterator<LazyElement> iterator() {
- ...
- List<WebElement> collection = getWrappedEntity();
- /*
- я бы назвала этот список - elements
- но то уже личные предпочтения)
- */
- /*
- по реализации - все ок
- единственное - я бы для LazyWrappedWebElement - передавала не только вебэлемент
- но и родительскую сущность
- т к - это важная информация о полученном вебэлементе
- причем стоит реализовать тип родительской сущности - LazyEntity
- чтобы можно было такой обернутый элемент делать как из лейзи коллекции, так и из лейзи элемента
- сам LazyWrappedWebElement - ок реализован
- */
- **********************************
- public class Mails {
- static String mails = "[role = 'main'] .zA";
- /*
- сразу делай лейзи-коллекцию - $$("[role = 'main'] .zA")
- и дальше ей оперируй
- код получится лаконичнее
- и наши лейзи-сущности так позволяют делать)
- */
- ...
- public static void assertMail(int index, String text) {
- // assertThat(mails, listNthElementHasText(index, text));
- // $$(mails).get(index).should(ElementConditions.text(text));
- }
- /*
- да)
- именно второй вариант строки - то что тебе надо
- применяй импорт статик для ElementConditions.text
- */
- ********************************************
- /*
- про Inner element search - как доделаешь get - еще раз взгляни на вводную информацию и это ревью
- все идеи - уже есть)
- */
- ******************************************
- public class Configuration {
- /*
- прокомментируй значения
- да и для pollingInterval - я бы рекомендовала выбрать шаг помельче
- 500 миллисекунд - многовато
- */
- public class Configuration {
- //default interval for WaitFor.Until - smart waiting check one condition, in milliseconds
- public static int timeout = 4000;
- //interval between checks inside WaitFor.Until, in milliseconds
- public static int pollingInterval = 100;
- }
Advertisement
Add Comment
Please, Sign In to add comment