как в List<WebElement> получить только видимые на странице элементы?

Как вариант, только так все-таки короче и удобнее ИМХО:

$$(By.xpath("//span")).filter(Condition.visible);

Тут и поиск и фильтрация

Посмотрите ответ @aleksey_ilyenko.

Абсолютно согласен с его идеей. Вам надо загрузить полный список рейсов в list, аннотированный @FindAll, затем, когда будет необходимо, фильтруете его по isDisplayed.

этот вариант я и буду использовать, и у меня был похожий вариант, но мне интересно было узнать можно ли все это сделать в аннотации без лишних методов, как в поиске в браузере.

да спасибо буду использовать этот вариант.

я знаю про selenide, но так как я только начинаю, то хотел сначала разобраться с возможностями selenium, а после уже осваивать производные от него.

“Selenium supports the superset of CSS1, 2, and 3.”
Он поддерживает то, что есть во всех 3 версиях CSS. Псевдотеги (:visible) не поддерживаются selenium’ом.
Мы пишем на python, когда нам без них не обойтись, мы используем jQuery
driver.execute_script(“return jQuery.find(’%s’);” % locator)
Получать все элементы - потом их фильтровать по isDisplayed очень медленно + у нас, например, очень много ajax запросов на странице, в итоге легко получить StaleElementException при последующем взаимодействии.