首页 > 解决方案 > 黄瓜场景 - 正确场景

问题描述

我正在尝试改善我的黄瓜场景(BDD)

假设我们有一个网站,它可以处于 3 种状态,并且基于这种状态,它在页面中有不同的 Web 元素。

您将如何编写黄瓜场景,使其尽可能接近 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 |

标签: testingcucumberbdd

解决方案


我不会推荐所有页面状态的场景大纲。您希望每个场景都紧紧关注您所断言的事物。例如,图片上传器应该是它自己的场景:

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:编写好的 Gherkin以获得更多关于如何编写描述行为的好步骤而不是逐步完成任务的过程的建议。


推荐阅读