Как избавиться от How и Using в [FindsBy...] C#

nunit
selenium
webdriver
Теги: #<Tag:0x00007fedbc5f3820> #<Tag:0x00007fedbc5f36e0> #<Tag:0x00007fedbc5f3578>

(Юрий Тесля) #1

Несколько недель назад пришлось перейти с Java на C#. И я до сих пор не могу свыкнуться с мыслью, что в Java я использовал "@FindBy(locator = " , а в С# каждый раз нужно писать “[FindsBy(How = How.locator, Using =…” .
Я в автотестах всего несколько месяцев и только проникся концепцией DRY, а тут постоянное дублирование кода((

ЗАДАЧА
Сделать кастомный атрибут без использования How и Using

РЕШЕНИЕ
Покапавшись в инете и посмотрев доклады конференций нашел то, что нужно (казалось бы) в JDI framework. Они используют кастомный аттрибут вида “[FindBy(locator =…” . Но он находит только их типизированные элементы, а не стандартный IWebElement.

ВОПРОС
Как можно реализовать поставленную задачу? Ничего не нашел на форумах. Буду рад ссылке или совету.


#2

Для этого надо при инициализации через PageFactory передавать свой IPageObjectMemberDecorator.

К сожалению, DefaultPageObjectMemberDecorator написан так, что не предполагает наследование с овверрайдом. Можно попытаться таки заоверрайдить Decorate() (но это будет нарушением дизайна), или продублировать реализацию для своих локаторов.