Камрады!
Столкнулся с такой проблемой:
- Необходимо прочитать весь список из dropdown и передать его в List<String>
Классически, до этого я использовал заполнение списка 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?