黄瓜场景 - 正确场景
Cucumber scenario - correct scenario
我正在尝试改进我的黄瓜场景 (BDD)
假设我们有一个网站,它可以处于 3 种状态,并且基于这种状态,它在页面中具有不同的 Web 元素。
您将如何编写 Cucumber 场景,使其尽可能接近 BDD 方法,并且易于理解?
目前我有:
Scenario Outline: View page in <PAGE STATE> state
Given I opened page in <PAGE STATE> state
Then I should see "<AVAILABLE ELEMENTS>
Examples:
| PAGE STATE | AVAILABLE ELEMENTS |
| State1 | Value input, Default slider, Active slider, |
| State2 | Value input, Default slider, Active slider, Type dropdown |
| State3 | Value input, Default slider, Active slider, Image uploader |
我不会推荐所有页面状态的场景大纲。您希望每个场景都紧密关注您所断言的事情。比如图片上传器应该是自己的场景:
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: Writing Good Gherkin 以获取有关如何编写描述行为的良好步骤而不是逐步完成任务的过程的更多建议。
我正在尝试改进我的黄瓜场景 (BDD)
假设我们有一个网站,它可以处于 3 种状态,并且基于这种状态,它在页面中具有不同的 Web 元素。
您将如何编写 Cucumber 场景,使其尽可能接近 BDD 方法,并且易于理解?
目前我有:
Scenario Outline: View page in <PAGE STATE> state
Given I opened page in <PAGE STATE> state
Then I should see "<AVAILABLE ELEMENTS>
Examples:
| PAGE STATE | AVAILABLE ELEMENTS |
| State1 | Value input, Default slider, Active slider, |
| State2 | Value input, Default slider, Active slider, Type dropdown |
| State3 | Value input, Default slider, Active slider, Image uploader |
我不会推荐所有页面状态的场景大纲。您希望每个场景都紧密关注您所断言的事情。比如图片上传器应该是自己的场景:
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: Writing Good Gherkin 以获取有关如何编写描述行为的良好步骤而不是逐步完成任务的过程的更多建议。