Bird
Raised Fist0
Testing Fundamentalstesting~15 mins

Behavior-driven development (BDD) concept in Testing Fundamentals - Build an Automation Script

Choose your learning style10 modes available
Verify login functionality using BDD style
Preconditions (1)
Step 1: Given the user is on the login page
Step 2: When the user enters username 'testuser' and password 'Test@1234'
Step 3: And clicks the login button
Step 4: Then the user should be redirected to the dashboard page
Step 5: And the welcome message 'Welcome testuser!' should be displayed
✅ Expected Result: User successfully logs in and sees the dashboard with the welcome message
Automation Requirements - Cucumber with Selenium WebDriver
Assertions Needed:
Verify current URL is dashboard URL
Verify welcome message text matches 'Welcome testuser!'
Best Practices:
Use Given-When-Then structure for test steps
Use Page Object Model for page interactions
Use explicit waits for elements to be visible before interacting
Keep test steps readable and reusable
Automated Solution
Testing Fundamentals
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import io.cucumber.java.en.*;
import static org.junit.Assert.*;

public class LoginSteps {
    private WebDriver driver;
    private WebDriverWait wait;

    public LoginSteps() {
        // Assume driver is initialized elsewhere and passed here
        this.driver = DriverManager.getDriver();
        this.wait = new WebDriverWait(driver, 10);
    }

    @Given("the user is on the login page")
    public void user_on_login_page() {
        driver.get("https://example.com/login");
        wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("login-form")));
    }

    @When("the user enters username {string} and password {string}")
    public void user_enters_credentials(String username, String password) {
        WebElement usernameField = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("username")));
        WebElement passwordField = driver.findElement(By.id("password"));
        usernameField.clear();
        usernameField.sendKeys(username);
        passwordField.clear();
        passwordField.sendKeys(password);
    }

    @When("clicks the login button")
    public void user_clicks_login() {
        WebElement loginButton = driver.findElement(By.id("login-button"));
        loginButton.click();
    }

    @Then("the user should be redirected to the dashboard page")
    public void verify_dashboard_url() {
        wait.until(ExpectedConditions.urlContains("/dashboard"));
        String currentUrl = driver.getCurrentUrl();
        assertTrue("URL should contain /dashboard", currentUrl.contains("/dashboard"));
    }

    @Then("the welcome message {string} should be displayed")
    public void verify_welcome_message(String expectedMessage) {
        WebElement welcomeMsg = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("welcome-message")));
        assertEquals(expectedMessage, welcomeMsg.getText());
    }
}

This code uses Cucumber annotations to map BDD steps to Java methods.

@Given opens the login page and waits for the form to appear.

@When enters username and password with explicit waits to ensure fields are ready.

@When clicks the login button.

@Then verifies the URL contains '/dashboard' to confirm redirection.

@Then checks the welcome message text matches the expected string.

Explicit waits ensure elements are ready before interaction, avoiding flaky tests.

Assertions confirm the expected outcomes clearly.

This structure follows BDD style with readable steps matching the manual test case.

Common Mistakes - 4 Pitfalls
Not using explicit waits before interacting with elements
Hardcoding URLs or messages inside test methods
Mixing test logic and UI interaction code in step definitions
Skipping assertions or verifying only partial outcomes
Bonus Challenge

Now add data-driven testing with 3 different username and password combinations

Show Hint

Practice

(1/5)
1. What is the main purpose of Behavior-driven development (BDD)?
easy
A. To write code faster without testing
B. To improve communication by using plain language to describe software behavior
C. To replace all manual testing with automated scripts
D. To focus only on the user interface design

Solution

  1. Step 1: Understand BDD's communication goal

    BDD uses simple language to describe how software should behave, making it easier for everyone to understand.
  2. Step 2: Compare options with BDD purpose

    Only To improve communication by using plain language to describe software behavior matches this goal; others focus on unrelated aspects like speed or UI only.
  3. Final Answer:

    To improve communication by using plain language to describe software behavior -> Option B
  4. Quick Check:

    BDD = plain language communication [OK]
Hint: BDD means plain language for behavior, not just coding [OK]
Common Mistakes:
  • Thinking BDD is only about automation
  • Confusing BDD with UI design
  • Believing BDD skips manual testing
2. Which of the following is the correct syntax style used in BDD scenarios?
easy
A. Try-Catch-Finally
B. If-Else-End
C. Start-Process-End
D. Given-When-Then

Solution

  1. Step 1: Recall BDD scenario structure

    BDD scenarios use the "Given-When-Then" format to describe context, action, and outcome.
  2. Step 2: Match options with BDD syntax

    Only Given-When-Then matches this format; others are programming constructs or unrelated terms.
  3. Final Answer:

    Given-When-Then -> Option D
  4. Quick Check:

    BDD syntax = Given-When-Then [OK]
Hint: BDD always uses Given-When-Then steps [OK]
Common Mistakes:
  • Confusing BDD syntax with programming keywords
  • Using If-Else as BDD steps
  • Mixing error handling terms with BDD
3. Consider this BDD scenario snippet:
Given the user is logged in
When the user clicks the logout button
Then the user should be logged out

What is the expected outcome of this scenario?
medium
A. The user is logged out after clicking logout
B. The user remains logged in
C. The logout button is disabled
D. An error message is shown

Solution

  1. Step 1: Analyze the 'When' action

    The user clicks the logout button, which triggers logout behavior.
  2. Step 2: Check the 'Then' expected result

    The user should be logged out, meaning the session ends successfully.
  3. Final Answer:

    The user is logged out after clicking logout -> Option A
  4. Quick Check:

    When logout clicked, Then user logged out [OK]
Hint: Match 'Then' outcome with expected behavior [OK]
Common Mistakes:
  • Ignoring the 'Then' step result
  • Assuming logout button disables instead
  • Confusing error messages with normal flow
4. Identify the error in this BDD scenario:
Given the user is on the homepage
When the user clicks the login button
And the user enters valid credentials
Then the user should see the dashboard
But the user sees an error message instead
medium
A. The scenario mixes expected and unexpected outcomes in 'Then' and 'But'
B. The 'Given' step is missing a URL
C. The 'When' step should not have multiple actions
D. The scenario lacks a 'Background' section

Solution

  1. Step 1: Review 'Then' and 'But' steps

    'Then' states the user should see the dashboard (expected), but 'But' says the user sees an error (unexpected).
  2. Step 2: Understand BDD scenario clarity

    BDD scenarios should describe one clear expected outcome; mixing expected and unexpected causes confusion.
  3. Final Answer:

    The scenario mixes expected and unexpected outcomes in 'Then' and 'But' -> Option A
  4. Quick Check:

    BDD expects clear outcomes, not conflicting ones [OK]
Hint: Avoid conflicting expected results in BDD steps [OK]
Common Mistakes:
  • Thinking multiple actions in 'When' are invalid
  • Believing 'Background' is mandatory
  • Assuming 'Given' must include URLs
5. You want to write a BDD scenario for a shopping cart feature that applies a discount only if the total price is above $100. Which scenario correctly uses BDD style to describe this behavior?
hard
A. Start cart Check total Apply discount if total > 100 End cart
B. If cart total > 100 then apply discount else no discount
C. Given the cart total is $120 When the user applies a discount code Then the discount should be applied
D. User adds items Discount applied automatically

Solution

  1. Step 1: Identify proper BDD format

    Given the cart total is $120 When the user applies a discount code Then the discount should be applied uses Given-When-Then steps clearly describing context, action, and expected result.
  2. Step 2: Evaluate other options for BDD style

    Options B, C, and D use programming logic or vague steps, not BDD's plain language format.
  3. Final Answer:

    Given the cart total is $120 When the user applies a discount code Then the discount should be applied -> Option C
  4. Quick Check:

    BDD scenario = Given-When-Then clear steps [OK]
Hint: Use Given-When-Then to describe behavior clearly [OK]
Common Mistakes:
  • Writing code logic instead of plain language
  • Skipping the 'Then' expected outcome
  • Using vague or incomplete steps
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard