Локаторы хранят как By, а findElement вызывают в момент действия — прозрачнее stale-поведение и проще отладка, чем у @FindBy прокси.
Разбор
- Методы page возвращают void или новые page objects (fluent navigation).
- Assertions оставляют в тесте или в assert-методах.
- Композиция component objects.
- Идиома популярна в Python/JS bindings так же.
Пример
class LoginPage:
EMAIL = (By.ID, "email")
def __init__(self, driver):
self.driver = driver
def set_email(self, value):
self.driver.find_element(*self.EMAIL).send_keys(value)
Итог
By + явный find — предсказуемый POM, часто предпочтительнее магии PageFactory.