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

Фотография

Использовать часть элементов из 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 772 сообщений
  • ФИО:Роман

Отправлено 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 772 сообщений
  • ФИО:Роман

Отправлено 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 772 сообщений
  • ФИО:Роман

Отправлено 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


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

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