Меня также очень интересовали бы мнения и практики других, но вот мои мысли.
Если вы выберете универсальную привязку «Когда я нажимаю« ([^ '] *) », у вас будет не так много информации в универсальном сценарии« Когда ». Тем не менее, вы можете попытаться «подождать» следующей загруженной страницы и проверить URL-адрес (IWebDriver), чтобы выяснить, где вы находитесь (в зависимости от браузера). Вам потребуется сопоставление между URL-адресом и объектами вашей страницы, чтобы иметь возможность правильно выбрать текущий объект страницы. Для этого вы можете создать сопоставление вручную, использовать некоторые условные обозначения или использовать другую существующую «информацию сопоставления», например, маршрутизацию ASP.NET или карту сайта, или, скорее всего, некоторую их комбинацию. ;)
Другая возможность состоит в том, чтобы отложить оценку текущего URL до Then, но в этом случае, вероятно, получатель свойства CurrentPageObject должен инкапсулировать это. Я имею в виду, что стоимость имущества не должна зависеть от того, «позвоните» ли вы «тогда» или нет.
Я попробовал немного другой подход в одном из моих последних проектов. Я написал более конкретные операторы When для моих сценариев, поэтому вместо «Когда я нажимаю« Поиск »», «Когда я нажимаю« Заказ »» или «Когда я нажимаю« Подтверждение »», у меня было «Когда я запускаю поиск с параметрами заполнено »,« Когда я заказываю выбранные товары »или« Когда я подтверждаю заказ ». Поскольку эти операторы описывали конкретное действие, я делегировал их текущему объекту страницы (приведенному к конкретной рассматриваемой странице), где у объекта страницы были конкретные методы для этих действий. Реализация не только «нажала» на соответствующую кнопку (базовая функциональность), но также дождалась загрузки страницы и соответствующим образом установила объект текущей страницы. В таких конкретных случаях было либо очевидно, что представляет собой «следующий» объект текущей страницы, либо я мог более или менее легко проверить, что произошло, если бы было больше возможных результатов. Ценой, которую я заплатил, было то, что это был не просто общий тип. Когда определение шага для клика, преимущество (помимо того, что объяснялось выше) состояло в том, что формулировка сценариев была больше сосредоточена на намерении пользователя, а не на конкретном элементе управления пользовательского интерфейса. -уровневое взаимодействие (выполнение действия вместо нажатия чего-либо)