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

Тестирование веб-приложений 2.0
онлайн, начало 25 января
Тестирование REST API
онлайн, начало 28 января
SQL для тестировщиков
онлайн, начало 28 января
Техники локализации плавающих дефектов
онлайн, начало 28 января
Фотография

Прочитать все элементы из dropdown в List <String>


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

#1 Vikonder

Vikonder

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

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

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

Камрады!

 

Столкнулся с такой проблемой:

- Необходимо прочитать весь список из dropdown и передать его в List<String>

 

23343897.jpg

 

Классически, до этого я использовал заполнение списка List<WebElement> по индексу динаического xpath

i.e.

public static String SOURCE_RACK_NAME_SELECTED = "//span[@formation-id='source-rack-name-%d']";

@Step(description = "Get all WebElements from the dropdown list input")
public List<WebElement> getAllElementsFromDropDownList(By xpathList, String xpathElement) {
      List<WebElement> webElementsArrayList = new ArrayList<>();
         aitForElementToBeVisible(xpathList);

           List<WebElement> webElementsFromDropDown = driver.findElements(xpathList);

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

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

     }
               System.out.println("<------------- The elements List -------------> " + webElementsFromDropDown);
       return webElementsArrayList;
}

Сейчас же для магипуляций с элементами списка, они должны быть String по-умолчанию

1. Открыть dropdown

2. Прочитать весь список в List<String>

3. Random выбрать один элемент

4. Вернуть его

 

Код html:

<div class="ui-select-choices-group optgroup">
<div class="ui-select-choices-group-label optgroup-header ng-binding ng-hide" ng-show="$select.isGrouped" ng-bind="$group.name"/>
<!-- ngRepeat: rack in $select.items -->
<!-- ngIf: $select.open -->
<div class="ui-select-choices-row ng-scope active" role="option" ng-class="{active: $select.isActive(this), disabled: $select.isDisabled(this)}" 
            ng-repeat="rack in $select.items" ng-if="$select.open" ng-click="$select.select(rack,$select.skipFocusser,$event)" style="">
<div class="option ui-select-choices-row-inner" data-selectable="" uis-transclude-append="">
<span class="ng-binding ng-scope" ng-bind-html="rack | highlight: $select.search" formation-id="source-rack-name-0">VIK6R01</span>
</div>
</div>
<!-- end ngIf: $select.open -->
<!-- end ngRepeat: rack in $select.items -->
<!-- ngIf: $select.open -->
<div class="ui-select-choices-row ng-scope" role="option" ng-class="{active: $select.isActive(this), disabled: $select.isDisabled(this)}" 
            ng-repeat="rack in $select.items" ng-if="$select.open" ng-click="$select.select(rack,$select.skipFocusser,$event)" style="">
<div class="option ui-select-choices-row-inner" data-selectable="" uis-transclude-append="">
<span class="ng-binding ng-scope" ng-bind-html="rack | highlight: $select.search" formation-id="source-rack-name-1">VIK6R02</span>
</div>
</div>
......

Манипуляции с WebElement --> String после не работают driver.findElement не работатет корректно со String 

Как вообще возможно после открытия DropBox прочитать его размер, чтобы потом заполнить List  [ не используя  driver.findElement(xpath); ]

 

Есть ли решение со стороны Selenium?


  • 0

#2 Spock

Spock

    Гуру

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

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

 

 

Необходимо прочитать весь список из dropdown и передать его в List<String>

сомневаюсь что это необходимо, вы же не проверяете что "все элементы отображаются в списке". Значит и нет необходимости считывать их все

 

 

 

Random выбрать один элемент

нет смысла выбирать рандом, выбирайте конкретный элемент, либо первый например


  • 0

#3 Vikonder

Vikonder

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

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

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

Spock

Сомневаюсь, что вы бы у нас долго продержались:)

 

Randomize выбора всех возможных элементов системы после постороения Builder на каждый - это концептуальная фишка нашего

нового начальства... 

Сотни тестов, которое я написал ранее по вашей схеме идут в разрез с новой идеологией,

поэтому всё новое хотят делать именно так, поэтому изголяться приходится по-черному....


  • 0

#4 Spock

Spock

    Гуру

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

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

 

 

Spock

Сомневаюсь, что вы бы у нас долго продержались:)

 

Randomize выбора всех возможных элементов системы после постороения Builder на каждый - это концептуальная фишка нашего

нового начальства... 

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

 

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

 

такое ощущение, что ваше начальство хочет проверить правильные ли данные в базе (оттуда идеи типа "выбрать все значения одно за другим", "выбирать рандомные значения"), но делает это не на том уровне - пытаются сделать это через веб-интерфейс, это медленно и ненадёжно и вообще так быть не должно


  • 0

#5 Alex

Alex

    Постоянный участник

  • Members
  • PipPipPip
  • 225 сообщений
  • ФИО:Алексей

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

Камрады!

 

Столкнулся с такой проблемой:

- Необходимо прочитать весь список из dropdown и передать его в List<String>

 

23343897.jpg

 

Классически, до этого я использовал заполнение списка List<WebElement> по индексу динаического xpath

i.e.

public static String SOURCE_RACK_NAME_SELECTED = "//span[@formation-id='source-rack-name-%d']";

@Step(description = "Get all WebElements from the dropdown list input")
public List<WebElement> getAllElementsFromDropDownList(By xpathList, String xpathElement) {
      List<WebElement> webElementsArrayList = new ArrayList<>();
         aitForElementToBeVisible(xpathList);

           List<WebElement> webElementsFromDropDown = driver.findElements(xpathList);

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

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

     }
               System.out.println("<------------- The elements List -------------> " + webElementsFromDropDown);
       return webElementsArrayList;
}

Сейчас же для магипуляций с элементами списка, они должны быть String по-умолчанию

1. Открыть dropdown

2. Прочитать весь список в List<String>

3. Random выбрать один элемент

4. Вернуть его

 

Код html:

<div class="ui-select-choices-group optgroup">
<div class="ui-select-choices-group-label optgroup-header ng-binding ng-hide" ng-show="$select.isGrouped" ng-bind="$group.name"/>
<!-- ngRepeat: rack in $select.items -->
<!-- ngIf: $select.open -->
<div class="ui-select-choices-row ng-scope active" role="option" ng-class="{active: $select.isActive(this), disabled: $select.isDisabled(this)}" 
            ng-repeat="rack in $select.items" ng-if="$select.open" ng-click="$select.select(rack,$select.skipFocusser,$event)" style="">
<div class="option ui-select-choices-row-inner" data-selectable="" uis-transclude-append="">
<span class="ng-binding ng-scope" ng-bind-html="rack | highlight: $select.search" formation-id="source-rack-name-0">VIK6R01</span>
</div>
</div>
<!-- end ngIf: $select.open -->
<!-- end ngRepeat: rack in $select.items -->
<!-- ngIf: $select.open -->
<div class="ui-select-choices-row ng-scope" role="option" ng-class="{active: $select.isActive(this), disabled: $select.isDisabled(this)}" 
            ng-repeat="rack in $select.items" ng-if="$select.open" ng-click="$select.select(rack,$select.skipFocusser,$event)" style="">
<div class="option ui-select-choices-row-inner" data-selectable="" uis-transclude-append="">
<span class="ng-binding ng-scope" ng-bind-html="rack | highlight: $select.search" formation-id="source-rack-name-1">VIK6R02</span>
</div>
</div>
......

Манипуляции с WebElement --> String после не работают driver.findElement не работатет корректно со String 

Как вообще возможно после открытия DropBox прочитать его размер, чтобы потом заполнить List  [ не используя  driver.findElement(xpath); ]

 

Есть ли решение со стороны Selenium?

На вашем же примере что мешает?

List<WebElement> webElementsFromDropDown = driver.findElements(xpathList);
List<String> names = new ArrayList();

for (WebElement listItem: webElementsFromDropDown) {

names.add(listItem.getText());

}

return names;

  • 1

#6 Vikonder

Vikonder

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

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

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

Конструкция WebElement.getText()

                      WebElement.getAttribute("value")

у меня не прокатывает и сыпет ошибками типа:

 

400 incorrect JSON status mapping for scale element reference [object null]....

 

Вообще, трансформация WEbElement --> String очень хрупкая конструкция, на выходе которой очень часто получаются flaky тесты.


  • 0

#7 TatyanaV

TatyanaV

    Опытный участник

  • Members
  • PipPipPipPip
  • 329 сообщений
  • ФИО:Воробьева Татьяна


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

Вообще, трансформация WEbElement --> String очень хрупкая конструкция, на выходе которой очень часто получаются flaky тесты.

 
То, что Вы написали примерно похоже на "трансформация Котлеты -> Мухи очень хрупкая конструкция". Это совершенно разные объекты. WebElement не надо "трансформировать" в строку, нужно вытащить значение нужного аттирибута, в котором и содержится текст.
WebElement.getText() - Вы прямо так и пишите? От класса getText()?

Вы попробовали тот вариант, который Вам выше написали?


  • 0


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



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

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

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