Программируют и читают и поддерживают код люди. Куча принципов, вопросов и ответов в ИТ строится на "как удобнее человекам".
Нет необходимости в том чтобы всё было сосредоточено в одном классе. Есть "larger class anti-pattern". Разбиение может, и неплохо может, быть функциональным, логическим, по нескольким блокам-группам вспомогательных элементов.
"Наследоваться" тоже не обязательно. Стоит изучить тему предназначения, применения и разных сторон композиции и наследования.
@FindBy тоже не обязателен. Опять таки сошлюсь на запись на YouTube Солнцева "10 причин моей ненависти".
https://www.youtube.com/watch?v=U6z2dK7MwmI&t=403sЕсли локатор нужен для одного, и только одного действия, ему ничего не мешает быть String константой или даже хардкодом.
Т.е. я бы предложил:
) логически разбить элементы на группы-блоки по контролам на странице (имеющиеся в интерфейсе группы, или логические)
) каждой группе сопоставить отдельный класс
) внутри page оставить самое необходимое, скажем, локаторы контролов, относящиеся к login
) в зависимости от настроения включить классы групп в page композицией, или работать с ними отдельно,
) если уж хочется для красоты идти по fluent/chaining проходить "отрывками" по зависимостям внутри групп в стиле builder pattern ( (
http://javacodingnerd.com/wp-content/uploads/2017/05/BuilderPattern.jpg) )