Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static Actions action() { return new Actions(getDriver()); }
- /*
- объект класса Actions - логично именовать actions() (а не action())
- реформатируй код - сейчас не стандартное форматирование
- */
- *****************************
- public static ExpectedCondition<WebElement> elementHasText(final By elementsLocator, final String elementText) {
- /*
- версия рабочая
- ниже приведу свою - поясню - что я реализовала бы не так и почему
- */
- public static ExpectedCondition<WebElement> elementHasText(final By elementsLocator, final String expectedText) {
- /*
- имя параметра expectedText - точнее отражает - что за текст
- а то, что это текст для элемента - из имени кондишена ясно
- */
- return elementExceptionsCatcher(new ExpectedCondition<WebElement>() {
- private List<String> actualTexts;
- /*
- на уровне класса объявляю лишь то, что будет нужно в разных методах класса
- остальное - лишь там, где используется
- имя actualTexts - тоже для кондишена четче обозначает - что за тексты
- */
- public WebElement apply(WebDriver driver) {
- List<WebElement> elements = driver.findElements(elementsLocator);
- /*
- elements - используется только внутри apply
- потому и объявляем переменную в apply
- */
- actualTexts = getTexts(elements);
- /*
- получение текстов тасок - будет нужно и в других кондишенах
- я бы вынесла это в отдельный метод и переиспользовала
- */
- for (int i=0; i<actualTexts.size(); i++) {
- if (actualTexts.get(i).equals(expectedText)) {
- return elements.get(i);
- /*
- можно обойтись и без создания специальной переменной
- */
- }
- }
- return null;
- }
- public String toString() {
- return String.format("\nList located by - %s"
- + "\nContains element with exact Text: %s"
- + "\nActual texts of list elements are: %s\n"
- , elementsLocator.toString()
- , expectedText
- , actualTexts.toString()
- /*
- подправила фразу немного
- и обрати внимание - насколько четче с терминами expectedText и actualTexts
- */
- );
- }
- });
- }
- /*
- на изменениях не настаиваю
- но рекомендую)
- эти же советы стоит применить и к реализации других кондишенов)
- */
- *****************************************************************
- public static ExpectedCondition<WebElement> elementHasCssClass(final By elementsLocator, final String cssClass) {
- ...
- classOfElements.add(element.getAttribute("class"));
- if (element.getAttribute("class").contains(cssClass)) {
- /*
- строчкой выше - уже получил element.getAttribute("class")
- второй раз получать - как-то излишне, можно оптимальнее
- и проверка .contains(cssClass) - не достаточна
- пример
- в атрибуте class = "active editing"
- делаем проверку для класса "edit"
- и она пройдет
- а не должна)
- надо разбить строку-значение атрибута class на слова - по пробелам
- (например - "active editing" на "active" и "editing"
- и потом - если среди этих слов - встречается равное cssClass
- тогда ок, класс содержится
- */
- **************************************************************************
- public static ExpectedCondition<List<WebElement>> exactTextsOfVisible(final By elementsLocator, final String... texts) {
- ....
- public String toString() {
- return String.format("\nList found with locator - %s"
- + "\nshould contain text(s): %s"
- + "\nwhile actual text(s): %s\n"
- , elementsLocator.toString()
- , Arrays.toString(texts)
- , textsOfVisible.toString()
- );
- }
- /*
- я бы сказала - should have
- т к это точнее описывает проверку
- мне кажется contain=содержит= может быть что-то еще кроме
- субъективно)
- не обязательно исправлять
- */
- ************************************************************
- public static ExpectedCondition<Boolean> sizeOfVisible(final By locator, final int sizeOfVisibleToBe) {
- /*
- пользы от реализации кондишена как ExpectedCondition<Boolean>
- меньше
- по сравнению с вариантом ExpectedCondition<List<WebElement>>
- обрати внимание на имя первого параметра
- подправь - чтоб придерживался одной линии с другими кондишенами
- однозначность - всегда полезна)
- */
- *****************************************
- public static List<String> getTextsOfVisible(List<WebElement> elements) {
- public static List<WebElement> getVisibleElements(List<WebElement> elements) {
- /*
- я бы реализовала набор методов getTexts и getVisibleElements
- более универсальный
- и их можно комбинировать - для получения текстов только видимых элементов = getTexts(getVisibleElements(elements))
- понятно - что твой вариант эффективнее
- т к один цикл вместо 2-ух
- но мой вариант - более DRY
- не настаиваю на изменениях
- */
- ******************************************
- package com.todomvcse.page;
- ...
- public class TaskManagerPage {
- /*
- имя пекеджа для пейджей - лучше pages
- даже если пейдж один
- возможно - он пока один) (в том смысле - что их будет больше)
- */
- *******************************************
- public void assertItemsLeft(int itemsLeft) {
- assertThat(visibilityOfElementLocated(By.cssSelector("#todo-count>strong")), itemsLeft);
- }
- /*
- ты вызываешь вот этот метод
- assertThat(ExpectedCondition<V> condition, int timeout)
- т е - itemsLeft - передаешь в качестве таймаута
- странно)
- зачем так?
- как считаешь - что мы проверили?
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement