Перейти к содержимому

Тестирование REST API
онлайн, начало 29 июля
Школа для начинающих тестировщиков
онлайн, начало 25 июля
Python для начинающих
онлайн, начало 26 июля
Автоматизация функционального тестирования
онлайн, начало 26 июля
Фотография

Использовать часть элементов из List<WebElement> c click()


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 7

#1 Vikonder

Vikonder

    Новый участник

  • Members
  • Pip
  • 31 сообщений

Отправлено 07 Сентябрь 2018 - 20:12

Камрады!

 

На фрейме, представленной ниже страницы, я хочу пробежаться по всем элементам выпадаюзего списка,

кроме ПЕРВОГО и соотвтетсвенно произвести Asserts для каждгого выбранного эдемента. (по нескольким позициям)

Логика выпадаюзего списка - это фильтрация, которая имеет свой pattern и конечное значение (Integer)

 

post-47229-0-24002500-1536350435_thumb.j

 

Code HTML:  (активного элемента)

<div class="ui-select-container selectize-control single ng-not-empty ng-valid ng-touched ng-dirty ng-valid-parse" ng-class="{'open': $select.open}" 
     theme="selectize" ng-model="ctrl.filter.rack.value" on-select="ui.addFilter('rack', ctrl.filter.rack.value)" style="">
<div class="selectize-input selectize-focus" ng-class="{'focus': $select.open, 'disabled': $select.disabled, 'selectize-focus' : $select.focus}" 
     ng-click="$select.open && !$select.searchEnabled ? $select.toggle($event) : $select.activate()" style="">
<div class="ui-select-match ng-scope" ng-hide="$select.searchEnabled && ($select.open || $select.isEmpty())" style="">
     <span class="ui-select-placeholder text-muted ng-binding ng-hide" ng-show="!$select.searchEnabled && ($select.isEmpty() || $select.open)"/>
     <span class="" ng-hide="$select.isEmpty() || $select.open" ng-transclude="" style="">FIX35R01</span>
</div>
<input class="ui-select-search ui-select-toggle ng-pristine ng-valid ng-empty ng-touched ng-hide" autocomplete="off" tabindex="-1" 
     ng-class="{'ui-select-search-hidden':!$select.searchEnabled}" ng-click="$select.toggle($event)" placeholder="" ng-model="$select.search" 
     ng-hide="!$select.isEmpty() && !$select.open" ng-disabled="$select.disabled" aria-label="Select box" style="width: 190px;" type="search"/>
</div>

Code (Java - Selenium)

    @Step(description = "filter all Racks Cables assertion")
    public  void assertAllCablesInRacks() {
        List<WebElement> rackElements = driver.findElements(CablingElements.RACK_FILTER_LIST);  //4 elements

        for (WebElement webElement : rackElements) {
            clickRackFilter();
            driver.findElement((By) webElement).click();
            assertFilterCables();
        }
    }

    @Step(description = "filter single Rack cables assertion")
    public void assertFilterCables() {
        commonWebSteps.waitForElementToBeVisible(CablingElements.CABLES_NUMBER);
        Integer actualRackFilterCount =  commonWebSteps.getNumberFromElement(CablingElements.CABLES_NUMBER);
        String actualRackName = commonWebSteps.getNameFromElement(CablingElements.RACK_TITLE);

        Integer expectedRackFilterCount =  cableRackFilterCount();
        String expectedRackName = commonWebSteps.getNameFromElement(CablingElements.RACK_FILTER_TAG);

        assertThat(actualRackFilterCount).as("<---------- Assert Cabling Filter count is failed ---------> " + actualRackFilterCount)
                .isEqualTo(expectedRackFilterCount);

        assertThat(actualRackName).as("<---------- Assert Cabling Filter name is failed ---------> " + actualRackName)
                .isEqualTo(expectedRackName);
    }



Проблемы:

 

1.  Из списка выпадающего dropbox мне нужно выбирать по очереди в цикле все элементы, кроме первого (default) 

     В первом методе, WebElement webElement : rackElements

    ---> Как при таком определении, правильно и корректно оформить пробег по всем элементам, кроме ПЕРВОГО

 


  • 0

#2 Vikonder

Vikonder

    Новый участник

  • Members
  • Pip
  • 31 сообщений

Отправлено 08 Сентябрь 2018 - 06:21

пожалуйста закройте эту дублированую тему


  • 0

#3 Vikonder

Vikonder

    Новый участник

  • Members
  • Pip
  • 31 сообщений

Отправлено 08 Сентябрь 2018 - 16:52

Удалили не ту тему, так что добавлю недостающее здесь

 

сама страница:

ac32150445b61a3e9bdde795753cd580-full.jp

 

Вопросы:

1. Из списка выпадающего dropbox мне нужно выбирать по очереди в цикле все элементы, кроме первого (default) 

     В первом методе, WebElement webElement : rackElements

    ---> Как при таком определении, правильно и корректно оформить пробег по всем элементам, кроме ПЕРВОГО

 

2. Как можно организовать метод click() непосредственно на сам WebElement

    Написанный выше cust -- driver.findElement((By) webElement).click();  - НЕ РАБОТАЕТ


  • 0

#4 Spock

Spock

    Гуру

  • Members
  • PipPipPipPipPipPip
  • 1 441 сообщений
  • ФИО:Роман

Отправлено 08 Сентябрь 2018 - 20:25

главный вопрос - а зачем это нужно?

 

если тестируем выпадающий список - то надо протестировать выбор только одного элемента, и список будет считаться рабочим


  • 0

#5 Vikonder

Vikonder

    Новый участник

  • Members
  • Pip
  • 31 сообщений

Отправлено 09 Сентябрь 2018 - 15:14

Spock, легитимный вопрос...

 

Отвечаю:  Принцип домино построения нашего продукта подразумевает открытие меню и его под-меню

на несколько уровней вниз. Постороение похоже на матаматический граф, при этом под-меню логически не всегда связаны между собой

(только в случает кросс линков).

Например, Rack --> Device --> Sub-device --> Virtual Sub-device --> Controller --> Model....

 

Пожтому выбор элемента из считанного списка (строит FE angular) открывает разные (!) дополнительные опции

А посему, пробегаясь по листу я каждый раз могу проверить еще что-то дополнительное....

Надеюсь, понятно изложил 

 

По вопросу выше, я частично решил проблему, использовав конструкцию:  get(index).click()

   @Step(description = "filter all Racks Cables select and assertion")
    public  void assertAllCablesInRacks(List<WebElement> elementsInRackFilter) {

        List<WebElement> rackElements = getAllElementsRackFilter(CablingElements.RACK_FILTER_LIST, CablingElements.RACK_FILTER_SELECTED);

        int sizeOfList = elementsInRackFilter.size();

        for (int i=1; i<sizeOfList;i++){

            try {
                rackElements.get(i).click();
            } catch (StaleElementReferenceException e){
                System.out.println("<------------- The element reference of [object Null] -------------> ");
            }
            assertFilterCables();
            clickRackFilter();
            rackElements = getAllElementsRackFilter(CablingElements.RACK_FILTER_LIST, CablingElements.RACK_FILTER_SELECTED);
            
        }

    }

Пробема, которую я до сих пор не победил - это универсальность этого метода для нескольких DROPBOX на одно1 стринице

 

Например,  для случая  2-х таких элементов, метод прекрасно срабатывает для первого DropBox  (пробегает поочередно все нужные мне элементы списка с assertion)

                    и стопорится уже в начале выбора второго DropBox  (по тому же методу) именно на той же самой строчке get(i).click();

 

5e7de358be90adce10e8e5732d3dbe0a-full.jp

 

Индексы пробега у обоих DropBox похожи:

public static String RACK_FILTER_SELECTED = "//span[@formation-id='rack-title-%d']";
public static String RACK_TYPE_SELECTED = "//span[@formation-id='rack-type-%d']";

Метод один и тот же  для обоих, List считывается и заполняется элементами.

    @Step(description = "get all elements from the list")
    public List<WebElement> getAllElementsRackFilter(By xpathList, String xpathFilter) {
        List<WebElement> rackFilterList = new ArrayList<>();
        List<WebElement> rackFilterElements = driver.findElements(xpathList);

        for (int i=0; i<rackFilterElements.size(); i++) {

            String xpathRackFilter = String.format(xpathFilter, i);
            By xpathRack = By.xpath(xpathRackFilter);
            WebElement listElement = driver.findElement(xpathRack);
            rackFilterList.add(listElement);

        }

        return rackFilterList;
    }

но вот близнец не хочет выбрать и кликать на элемент

Может нужно очищать cache или обгулять списки и листы после первого использования?


  • 0

#6 Spock

Spock

    Гуру

  • Members
  • PipPipPipPipPipPip
  • 1 441 сообщений
  • ФИО:Роман

Отправлено 09 Сентябрь 2018 - 15:21

"А посему, пробегаясь по листу я каждый раз могу проверить еще что-то дополнительное....

Надеюсь, понятно изложил"

Так всё равно непонятно зачем проверять ВСЕ элементы. Разве выбор каждого элемента вызывает какое-то особое поведение системы? Надо же использовать эквивалентные партиции, а не тестить каждое значение каждого списка
  • 0

#7 Vikonder

Vikonder

    Новый участник

  • Members
  • Pip
  • 31 сообщений

Отправлено 09 Сентябрь 2018 - 17:39

Представь себе 3 фильтра

 

Filter 1         Filter2         Filter 3      

All                  All               All

Rack1           Device1       Power

Rack2           Device2       Managment 

Rack3           Device3       Data    

...                    .....              ....

И какая матрица возможностей получится?


  • 0

#8 Spock

Spock

    Гуру

  • Members
  • PipPipPipPipPipPip
  • 1 441 сообщений
  • ФИО:Роман

Отправлено 09 Сентябрь 2018 - 19:01

1й тест - проверить что 1й фильтр работает

2й тест - проверить что 2й фильтр работает

3й тест - проверить что 3й фильтр работает

 

конечно можно добавить еще тесты, типа:

4й тест - 1й + 2й фильтры

5й тест - 1й + 3й фильтры

6й тест - 2й + 3й фильтры

7й тест - 1й + 2й + 3й фильтры

но это уже немного оверкилл

 

а насчет матрицы - никакой матрицы тут нет

 

у вас 97 кабелей. это не означает что надо крутить 97 тестов/проверок фильтруется ли по каждому кабелю. Это означает что нужен 1 тест "фильтрация по кабелю"


  • 0


Selenium 2.0: стартовый уровень
онлайн
Программирование на Java для тестировщиков
онлайн
Автоматизация функционального тестирования
онлайн
Selenium WebDriver: полное руководство
онлайн



Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных

Яндекс.Метрика
Реклама на портале