Нужно взять из колекции элемент пропущенный через фильтр и выбранный рандомно.
Фильтр это кастомное условие Condition из примеров селенида child("xpath", Condition.attributeMatching("attr", "regex"))
Далее через этот элемент ищутся и выполняются разные действия, в том числе происходит изменение вложенного элемента по которому был отфильтрован нужный верхний элемент, и получается так что при каждом обращении к элементу он каждый раз применяет фильтр, и берет следующий элемент от текущего отфильтрованного если иконка Red сменилась на Blue.
<div>
<a iconRed><\a>
</div>
<div>
<a iconRed><\a>
</div>
<div>
<a iconBlue><\a>
</div>
<div>
<a iconRed><\a>
</div>
Например нашли все div с иконкой Red рандомно выбрали div 2 иконка Red, сделали клик, иконка стала Blue, при следующем обращении к переменной которой был присвоен элемент div 2 выбирается следующий div 4 с иконкой Red Если элемент div был последний то out of bound exception.
В моем представлении если я присваиваю переменной конкретный div из коллекции то он так и должен остаться ссылкой на этот div без применения фильтра. Фильтр это только условие по которому я его выбрал.
ElementCollection ec = $$x(".//div")
.filter(child("./a", attributeMatching("attr", "Red$")));
SelenideElement se = ec.get(random());
Как понять что происходит и как исправить?
Единственное на данный момент решение прогнать коллекцию элементов или через стрим(старый) с стрим фильтром или прогнать отфитрованную коллекцию через стрим asFixedIterable собрать их в лист и рандомно выбрать.