Я бы не рекомендовал наброски сценария для всех состояний страницы. Вы хотите, чтобы каждый сценарий был сосредоточен на том, что вы утверждаете. Например, загрузчик изображений должен иметь свой собственный сценарий:
Scenario: Users can upload an image when things are foobarred
# One or more `Given` steps to put the system into the correct state
Given a foo exists
And bar has happened
And a baz has been foobarred
When I am viewing the page
Then I should be able to upload an image
И пример шага, делающего утверждение:
[Then(@"I (should|should not) be able to upload an image")]
public void ThenIShouldBeAbleToUploadAnImage(string assertion)
{
bool isFound = false;
try
{
var element = driver.FindElement(By.Css("input[type='file']"));
isFound = true;
}
catch (NoSuchElementException)
{
// do nothing
}
catch (WebDriverTimeoutException)
{
// do nothing
}
if (assertion == "should")
{
// Assert isFound is true
}
else
{
// Assert isFound is false
}
}
В названии сценария четко указан узкий контрольный пример. Каждое состояние страницы четко определено в шагах Given
для этого сценария. У него также есть только одно утверждение, и, следовательно, только одна причина, по которой этот сценарий может когда-либо завершиться неудачей (поле загрузки изображения отсутствует).
Вы хотите, чтобы ваши сценарии были сосредоточены на одном поведении. Ваши шаги не должны описывать технические детали страницы или экрана, а должны описывать действия пользователя. Вы не должны утверждать, что поле загрузки является видимым. Вы должны заявить, что можете загрузить изображение , и определение шага позаботится о поиске поля загрузки изображения.
См. BDD 101: Написание хорошего корнишона для получения дополнительных советов о том, как написать хорошие шаги, описывающие поведение, а не пошаговый процесс для выполнения задачи.