Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Да, ты прав, вижу проблемы с абстракцией, я просто не видел зависимости между методом в ConciseAPI и окончательной реализацией, это сейчас видно, что их минимально тоже нужно править)
- Продвинулся дальше, поправил часть кондишнов, по ходу сразу правил методы и проверял их работу, сейчас есть проблема с методом:
- public static void toggle(String taskText) {
- $(tasks, elementWithText(taskText), ".toggle");
- }
- Вроде бы как есть метод в Concise API на основе которого он работает и выглядит также:
- public static WebElement $(By elements, Function<By, WebElement> conditionToWaitParentElement, String innerElementCssSelector) {
- return $(elements, conditionToWaitParentElement, byCss(innerElementCssSelector));
- }
- Вот коммит последний: https://bitbucket.org/nekontachik/selenium_framework/src/6432f32fbe3aef7527124631fbd22d3d3eefb2e5/src/?at=master
- И да, ты прав, переключаюсь параллельно на exercism
- Спокойной ночи
- такс, вот список твоих методов:
- ```
- public static WebElement $(By element, Function<By, WebElement> conditionToWaitElement) {
- return assertThat(conditionToWaitElement, element);
- }
- /*
- почему в этом первый параметр называется element, разве мы когда то искали внутри элемента другой элемент по кондишену?
- мы ведь искали по кондишену элементу внутри списка элементов а не элемента...
- разве не логично назыать тогда первый параметр By elements
- ?
- если быть совсем точным то это кстати By elementsLocator
- но можно быть и лаконичным, и оставить elements
- */
- public static WebElement $(Function<By, WebElement> condition, By elementLocator) {
- return assertThat(condition, elementLocator);
- }
- /*
- а чем этот метод отличается отпредыдущего кроме того что у него порядок параметров другой, и имя для локатора как раз с Locator в конце?
- зачем он?
- */
- public static WebElement $(By element) {
- return assertThat(visibilityOfElementLocated(), element);
- }
- /*
- с этим методом все как бы ок... но давай глянем на реализацию кондишена:
- public static Function<By, WebElement> visibilityOfElementLocated() {
- return elementExceptionsCatcher(new Function<By, WebElement>() {
- List<WebElement> elements;
- public WebElement apply(By element) {
- elements = getDriver().findElements(element);
- /*
- какой elementS? какой findElementS? зачем нам список? мы же собрались
- проверять что элемент видимый... зачем нам искать по этому локатору список элементов? я в недоумении :)
- */
- /*
- о боже а теперь посмотри на свою следующую строчку:
- ты в ней даже не юзаешь этот elements который ты нашел...
- */
- return CustomConditions2.elementIfVisible(getDriver().findElement(element));
- }
- /*
- а где же ты его юзал?
- */
- public String toString() {
- return "visibility of element located by " + elements;
- /*
- а вот где, и о боже... ты вчитайся только в эту фразу:
- visibility of element located by elements
- это как так?
- element located by elements?
- о_О
- где логика?
- во первых нелогично то что ты передаешь elementS
- то есть список, а мы ведь тут таки с одним элементом должны работать
- во вторых нелогично то что в фразе
- located by ...
- в ее продоженни (там где три точки сейчас) ожидается ЛОКАТОР!
- слово то located зачем по твоему?
- а ты туда не локатор приплюсовал а уже конкретно найденный список...
- о_О
- у меня скоро раплавится мозг :) чесно чесно :)
- хотя сейчас я поел мороженного, и поэтому счастлив) и как то держусь)
- не так нервничаю как обычно видя такой код :)
- */
- }
- });
- }
- */
- public static WebElement $(String cssSelector) {
- return $(byCss(cssSelector));
- }
- /*
- сдесь все логично...
- */
- public static WebElement $(By element, Function<By, WebElement> conditionToWaitParentElement, By innerElementLocator) {
- return assertThat(conditionToWaitParentElement, element).findElement(innerElementLocator);
- }
- /*
- это по идее должен быть такой же метод как самый первый был... только этот еще в конце и внутри результата (найденного элемента по кондишену в списке элементов) должен найти внутренний элемент...
- и снова - та же проблема - мы же в СПИСКЕ элементов должны искать... почему By element, а не By elementS ???
- */
- public static WebElement $(By elements, Function<By, WebElement> conditionToWaitParentElement, String innerElementCssSelector) {
- return $(elements, conditionToWaitParentElement, byCss(innerElementCssSelector));
- }
- /*
- опа!!! ну ничего себя :)
- Ура!
- тут все правильно :)))) есть таки s в конце имени первого параметра :)
- */
- ```
- но говоришь такой код не работает:
- public static void toggle(String taskText) {
- $(tasks, elementWithText(taskText), ".toggle");
- }
- говоришь есть проблема
- так а в чем проблема?
- я по твоему телепат что могу знать почему оно у тебя там еррор выдает?
- мог бы мне хотябы еррор показать... скриншот какой то скинуть...
- иногда конечно видно сразу мне где ошибка... но не всегда... учись обьяснять свои проблемы более детально
- это тебе самому же начнет помогать находить решение...
- ну ок...
- код выглядит нормальным...
- единственное что тут пока загадка - это кондишен elementWithText
- ну ок...
- давай заценим его:
- public static Function<By, WebElement> elementWithText(final String exactText) {
- /*
- вот кстати здесь речь идет не просто о элементе а о элементе списка элементов
- поэтому и имя должно быть более детальным listElementWithText
- */
- return elementExceptionsCatcher(new Function<By, WebElement>() {
- List<String> actualTexts = new ArrayList<String>();
- List<WebElement> elements;
- public WebElement apply(By element) {
- /*
- и вот здесь element кстати не совсем удачное имя... потому что в этом случае мы как раз ожидаем на этом месте "локатор для списка элементов"
- поэтому имя можно подправить на elementsLocator
- */
- actualTexts = new ArrayList<String>();
- elements = getDriver().findElements(element);
- actualTexts = getTexts(elements);
- for (int i = 0; i < actualTexts.size(); i++) {
- if (actualTexts.get(i).equals(exactText)) {
- return elements.get(i);
- }
- }
- return null;
- }
- public String toString() {
- return "List of elements located" + elements + "\n should have elements with exact text : " + exactText + "\n while actual texts are " + actualTexts;
- /*
- тут в еррор снова после слова located не то что нужно передаешь... локатор нужно передавать
- а не список найденных элементов...
- его тожно можно передать куда то - ну в другом месте строки
- но я бы пока ограничился только локатором, и так ты плутаешься
- */
- }
- });
- }
- такс, ну вот код выглядит более менее верным, я проблемы не вижу...
- это нужно смотреть на текст ошибки...
- в чем именно твоя проблема?
Advertisement
Add Comment
Please, Sign In to add comment