Код выбирает элемент из выпадающего списка.
В некоторых тестах работает, в некоторых нет.
При этом если запустить тесты в которых код не работает отдельно – тесты проходят.
Select2 - это вообще отдельная песня. Он на каждый чих обновляет список. Время загрузки самого списка может сильно зависеть от кол-ва элементов.
Вообще говоря, я в свое время отказался от затеи вбивать текст в его инпут из-за динамической фильтрации. В итоге, пришлось писать обертку над Select2 и обращаться к этому компоненту через его нативные API.
К примеру, чтобы раскрыть список, можно вызвать следующий JS:
При этом, rootElementSelector всегда имеет id, и почти всегда некорректно распознается FirePath’ом при подсветке. Как правило, выбирается 1 из вложенных компонентов. Но, немного потренировавшись, можно без труда его определять и на глаз. Выпадающий список имеет постоянную XPath структуру, т.е. вполне реально создать динамический локатор и селектить элемент по строгому вхождению текста, либо via contains.
В целом, если список небольшой, можно скомбинировать JS раскрытие + WebDriverWait для выбора из списка.
Проще всего будет 1 раз написать обертку для Select2 и использовать ее по всему коду. Тестировать Select2 api можете прямо в консоли браузера.
Ну скажем так, для Select2 пока нет готового компонента у драйвера, в отличие от первой версии Select. Использовать его с WebDriver вполне реально, но из-за динамической фильтрации появляется множество подводных камней. Драйвер то вбивает текст посимвольно, что постоянно тригерит ивент фильтрации списка. А постоянное обновление чревато появлению стейлов. Ну можете еще попробовать вводить текст целиком, по типу paste. Тогда обновление пройдет лишь единожды. Но с нативным открытием списка имхо гораздо проще, т.к. по сути вам нужно подождать лишь пока он прогрузится. А дальше, простым кликом выбираете элемент по вхождению / равенству текста.