Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public abstract class AbstractSmartElement implements SmartElement {
- abstract WebElement fetchWrappedEntity();
- ....
- @Override
- public WebElement getWrappedEntity() {
- WebElement element = fetchWrappedEntity();
- if (element == null) {
- throw new ElementNotFoundException();
- }
- return element;
- }
- /*
- ну, мог бы уже и вначале - возле объявления fetchWrappedEntity()
- реализовать и getWrappedEntity()
- вещи связанные и их удобно видеть рядом
- реализация - ок
- единственное - мог бы и рассказать в рамках вызова исключения - что же
- за элемент не найден
- как раз toString смарт-элемента - будет хорошим описанием
- реализуй исключению - конструктор с параметром String message
- http://developer.alexanderklimov.ru/android/java/extends.php
- http://metanit.com/java/tutorial/3.5.php
- https://docs.oracle.com/javase/tutorial/java/IandI/super.html
- и тут, при вызове конструктора исключения - передавай toString смарт-элемента
- */
- **********************************************
- public class SmartCollectionIndexElement extends AbstractSmartElement {
- ....
- @Override
- public WebElement fetchWrappedEntity() {
- return parentCollection.getWrappedEntity().get(index) == null ? null : parentCollection.getWrappedEntity().get(index);
- // return parentCollection.getWrappedEntity().get(index);
- }
- /*
- читаем код)
- если такой-то вебэлемент из списка элементов равен нуллу
- то вернуть нулл
- иначе - заново его получить)
- пляски с бубном) - побегали по кругу и мозги заплели (не тщательно, но все же)
- во-первых
- мы собственноручно нулл не возвращаем
- в таком случае мы кинем эксепшен
- во-вторых - посмотри на реализацию getWrappedEntity() в абстрактном предке
- даже если fetchWrappedEntity() принесет нулл
- то мы там бросим эксепшен
- тут нам нужно
- вернуть parentCollection.getWrappedEntity().get(index);
- мы явно нулл не возвращаем - этого достаточно
- мы чего звелись с этой схемой с исключениями вместо нулла
- с целью сделать код проще и надежнее
- это позволит нам кучи проверок не делать в принципе
- что тут будет таки полезно (уже не в ключе борьбы с нуллом, а в ключе организации порядка)
- тут return parentCollection.getWrappedEntity().get(index);
- обернуть в try-catch
- c целью поймать IndexOutOfRangeException
- и вместо него - кинуть свой эксепшен SmartСollectionIndexOutOfBoundsException
- тоже - наследника WebDriverException
- цель - чтобы те try-catch, в которых мы сейчас ловим IndexOutOfRangeException и WebDriverException
- были проще (можно будет ловить только WebDriverException) - это мы тоже поправим (ниже будет про это)
- да и в конструктор SmartСollectionIndexOutOfBoundsException - передавай toString смарт-элемента
- это однозначно улучшит и уточнит текст ошибки
- это как раз про картинку http://joxi.ru/52aYKgPsGPGk32 - ты спрашивал
- */
- *********************************************************
- public class SmartElementInnerElement extends AbstractSmartElement {
- @Override
- public WebElement fetchWrappedEntity() {
- return element.getWrappedEntity().findElement(cssSelector) == null ? null : element.getWrappedEntity().findElement(cssSelector);
- // return element.getWrappedEntity().findElement(cssSelector);
- }
- }
- /*
- примерно те же грабли
- верни старую реализацию
- думаю - тут уже подробностей не надо)
- то же касается и SmartWebDriverElement
- и SmartWrappedElement
- */
- ************************************************************
- /*
- кстати - не вижу реализованных методов toString для смарт элементов
- проверь все смарт-сущности на этот счет
- каждая из них должна внятно про себя рассказывать
- */
- ***************************************************
- public abstract class AbstractCondition<V> implements Condition<V>, DescribesResult {
- ...
- public V apply(SmartEntity<V> smartEntity) {
- this.smartEntity = smartEntity;
- V wrappedEntity = smartEntity.getWrappedEntity();
- /*
- у нас в wrappedEntity - будет или не нулл
- или уже вызовется исключение
- по крайней мере - такая реализация у getWrappedEntity() уже должна быть )
- */
- if (wrappedEntity != null) {
- /*
- именно поэтому - и не нужен такой if
- мы досбда просто не дойдем - если ранее нулл назрел)
- */
- return (check(wrappedEntity))?wrappedEntity:null;
- /*
- и тут не надо возвращать нулл
- если проверка прошла - верни wrappedEntity
- иначе - брось исключение WebDriverAssertionException
- тоже - передай ему в конструктор toString (уже кондишена)
- */
- }
- throw new WebDriverAssertionException();
- /*
- это - строчка бессмысленная пока)
- т к по предыдущей - мы вышли из метода = return
- с тернарным оператором тут придется расстаться)
- */
- }
- *********************************************************
- public class SmartCollectionFoundByConditionElement extends AbstractSmartElement {
- ...
- /*
- специально оставила на закуску
- */
- @Override
- public WebElement fetchWrappedEntity() {
- for (SmartElement smartElement: parentCollection) {
- try {
- if (condition.apply(smartElement) != null) {
- /*
- вспомни - наш apply может вренуть нулл ?
- он или вернет некое не нулл - значение
- или упадет
- вопрос - зачем нам теперь такой if?
- достаточно - просто вызвать condition.apply(smartElement)
- не упал - и нам этого хватает)
- можно дальше что-то делать
- */
- return smartElement.getWrappedEntity() == null ? null : smartElement.getWrappedEntity();
- // return smartElement.getWrappedEntity();
- /*
- и тут мы - просто, без проверок и бега по кругу
- вернем smartElement.getWrappedEntity();
- надеюсь, понятно почему
- если нет - надо таки обсудить этот момент
- */
- }
- } catch (IndexOutOfBoundsException | WebDriverException e) {
- /*
- мы уже перехватили IndexOutOfBoundsException
- и вместо него бросаем потомка WebDriverException - SmartСollectionIndexOutOfBoundsException
- так что - тут лови только WebDriverException
- есть еще такие же места в коде - их поправь аналогично
- */
- }
- }
- return null;
- /*
- вот так - мы не пишем более нигде
- бросай ElementNotFoundException
- toString этого смарт-элемента - в качестве параметра
- */
- }
- }
- /*
- подумай - что из реализованного тут надо бы применить
- в SmartFilteredByConditionCollection
- см прошлое ревью строки 38-54
- возможно - сообразишь - как реализовать метод is и его применить
- */
- ***********************************
- ну и еще.... я смотрю на свой тест по ТудуМВС - как-то не так оно работает... непойму где но чтото не то
- /*
- пока не подправишь выше описанное - тудуэмвиси будет работать как-то не так)
- хороший результат = и тудуэмвиси, и остальные тесты хорошо бегают
- не увидела ничего из реализованного для Optimize Speed
- пока давай по очереди делать
- нету смысла начинать то - пока тут проблемы
- */
Advertisement
Add Comment
Please, Sign In to add comment