Bird
Raised Fist0
Selenium Javatesting~15 mins

Allure reporting integration in Selenium Java - Build an Automation Script

Choose your learning style10 modes available
Verify login functionality with Allure reporting
Preconditions (3)
Step 1: Open the browser and navigate to 'https://example.com/login'
Step 2: Enter 'testuser' in the username input field with id 'username'
Step 3: Enter 'Test@1234' in the password input field with id 'password'
Step 4: Click the login button with id 'loginBtn'
Step 5: Wait until the URL changes to 'https://example.com/dashboard'
Step 6: Verify that the page title is 'Dashboard - Example App'
✅ Expected Result: User is successfully logged in and redirected to the dashboard page. Allure report captures each step with screenshots and logs.
Automation Requirements - Selenium with TestNG and Allure
Assertions Needed:
Verify current URL is 'https://example.com/dashboard'
Verify page title is 'Dashboard - Example App'
Best Practices:
Use Page Object Model to separate page interactions
Use explicit waits to wait for URL and elements
Add Allure annotations for test steps and attach screenshots on failure
Use TestNG assertions for validation
Automated Solution
Selenium Java
import io.qameta.allure.Allure;
import io.qameta.allure.Step;
import io.qameta.allure.Attachment;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

import java.io.ByteArrayInputStream;
import java.time.Duration;

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

    @BeforeClass
    public void setUp() {
        driver = new ChromeDriver();
        wait = new WebDriverWait(driver, Duration.ofSeconds(10));
    }

    @Test(description = "Verify login functionality with Allure reporting")
    public void testLogin() {
        openLoginPage();
        enterUsername("testuser");
        enterPassword("Test@1234");
        clickLoginButton();
        waitForDashboardUrl();
        verifyDashboardPage();
    }

    @Step("Open login page")
    public void openLoginPage() {
        driver.get("https://example.com/login");
        Allure.step("Navigated to login page");
    }

    @Step("Enter username: {username}")
    public void enterUsername(String username) {
        WebElement usernameField = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("username")));
        usernameField.clear();
        usernameField.sendKeys(username);
        Allure.step("Entered username");
    }

    @Step("Enter password")
    public void enterPassword(String password) {
        WebElement passwordField = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("password")));
        passwordField.clear();
        passwordField.sendKeys(password);
        Allure.step("Entered password");
    }

    @Step("Click login button")
    public void clickLoginButton() {
        WebElement loginBtn = wait.until(ExpectedConditions.elementToBeClickable(By.id("loginBtn")));
        loginBtn.click();
        Allure.step("Clicked login button");
    }

    @Step("Wait for dashboard URL")
    public void waitForDashboardUrl() {
        boolean urlChanged = wait.until(ExpectedConditions.urlToBe("https://example.com/dashboard"));
        Assert.assertTrue(urlChanged, "URL did not change to dashboard");
        Allure.step("Dashboard URL loaded");
    }

    @Step("Verify dashboard page title")
    public void verifyDashboardPage() {
        String expectedTitle = "Dashboard - Example App";
        String actualTitle = driver.getTitle();
        try {
            Assert.assertEquals(actualTitle, expectedTitle, "Page title mismatch");
            Allure.step("Page title verified: " + actualTitle);
        } catch (AssertionError e) {
            saveScreenshot();
            throw e;
        }
    }

    @Attachment(value = "Screenshot on failure", type = "image/png")
    public byte[] saveScreenshot() {
        return ((org.openqa.selenium.TakesScreenshot) driver).getScreenshotAs(org.openqa.selenium.OutputType.BYTES);
    }

    @AfterClass
    public void tearDown() {
        if (driver != null) {
            driver.quit();
        }
    }
}

This test uses Selenium WebDriver with TestNG and Allure for reporting.

Setup: We start ChromeDriver and create an explicit wait.

Test steps: Each step is a method annotated with @Step for Allure to log it clearly.

We open the login page, enter username and password, click login, then wait for the dashboard URL.

Assertions check the URL and page title. If the title assertion fails, a screenshot is attached to the Allure report using @Attachment.

This structure follows the Page Object Model style by separating actions into methods, uses explicit waits to avoid timing issues, and integrates Allure steps and attachments for clear, detailed reports.

Common Mistakes - 5 Pitfalls
Using Thread.sleep() instead of explicit waits
Not adding Allure @Step annotations to test steps
{'mistake': 'Not attaching screenshots on test failure', 'why_bad': "Without screenshots, it's harder to understand what went wrong when tests fail.", 'correct_approach': 'Use @Attachment to capture and attach screenshots on assertion failures.'}
Using hardcoded waits or no waits before assertions
Mixing locators styles or using brittle XPath selectors
Bonus Challenge

Now add data-driven testing with 3 different username and password combinations using TestNG data provider.

Show Hint

Practice

(1/5)
1. What is the main purpose of integrating Allure reporting in Selenium Java tests?
easy
A. To generate clear and shareable test reports with detailed steps
B. To speed up the execution of Selenium tests
C. To replace Selenium WebDriver with a new testing tool
D. To write test cases without any code

Solution

  1. Step 1: Understand Allure reporting purpose

    Allure reporting is designed to make test results easy to read and share by adding detailed steps and descriptions.
  2. Step 2: Compare options with Allure features

    Only To generate clear and shareable test reports with detailed steps correctly describes Allure's role in generating clear, detailed reports. Other options describe unrelated features.
  3. Final Answer:

    To generate clear and shareable test reports with detailed steps -> Option A
  4. Quick Check:

    Allure reporting = clear, shareable reports [OK]
Hint: Allure = better test reports, not faster tests [OK]
Common Mistakes:
  • Confusing Allure with test execution speed tools
  • Thinking Allure replaces Selenium WebDriver
  • Assuming Allure writes tests automatically
2. Which annotation is used in Selenium Java tests to add a detailed step description in Allure reports?
easy
A. @Step
B. @Test
C. @BeforeMethod
D. @Ignore

Solution

  1. Step 1: Identify Allure annotations for steps

    The @Step annotation marks methods as steps in Allure reports, adding detailed descriptions.
  2. Step 2: Eliminate unrelated annotations

    @Test runs tests, @BeforeMethod runs setup, @Ignore skips tests. Only @Step adds step details.
  3. Final Answer:

    @Step -> Option A
  4. Quick Check:

    @Step = detailed step in Allure [OK]
Hint: @Step marks steps for Allure, not test execution [OK]
Common Mistakes:
  • Confusing @Step with @Test annotation
  • Using @BeforeMethod for step descriptions
  • Thinking @Ignore adds report details
3. Given the following code snippet, what will be the Allure report output for the step description?
@Step("Open login page")
public void openLoginPage() {
    driver.get("https://example.com/login");
}
medium
A. The report will not show any step because @Step is ignored
B. The report will show an error because @Step requires a return value
C. The report will show a step named 'Open login page' when this method runs
D. The report will show the URL instead of the step name

Solution

  1. Step 1: Understand @Step annotation usage

    The @Step annotation with a string parameter sets the step name shown in Allure reports.
  2. Step 2: Analyze the method behavior

    When openLoginPage() runs, Allure logs the step with the name 'Open login page'. No return value is needed.
  3. Final Answer:

    The report will show a step named 'Open login page' when this method runs -> Option C
  4. Quick Check:

    @Step("Open login page") = step shown as 'Open login page' [OK]
Hint: @Step string sets step name in report [OK]
Common Mistakes:
  • Thinking @Step needs a return value
  • Assuming steps are ignored without extra config
  • Expecting URL to appear instead of step name
4. You added @Step annotations to your Selenium Java test methods, but Allure reports do not show any steps. What is the most likely cause?
medium
A. Allure does not support Selenium tests
B. @Step annotation is only for JUnit, not TestNG
C. You need to add @Test annotation to every step method
D. You forgot to add the Allure listener or adapter in your test setup

Solution

  1. Step 1: Check Allure integration requirements

    Allure requires adding listeners or adapters (like Allure TestNG listener) to capture @Step annotations during test execution.
  2. Step 2: Identify common misconfigurations

    Without the listener, steps are not recorded. The other options are incorrect because Allure supports Selenium tests, @Step works with TestNG, and @Test is for test methods.
  3. Final Answer:

    You forgot to add the Allure listener or adapter in your test setup -> Option D
  4. Quick Check:

    Missing listener = no steps in report [OK]
Hint: Add Allure listener to capture @Step annotations [OK]
Common Mistakes:
  • Assuming @Step works without listener
  • Confusing @Step with @Test annotation
  • Believing Allure doesn't support Selenium
5. You want to generate an Allure report after running your Selenium Java tests with Maven. Which sequence of commands correctly runs tests and generates the report?
hard
A. mvn test clean allure:report
B. mvn clean test allure:serve
C. allure generate mvn test
D. mvn allure:report clean test

Solution

  1. Step 1: Understand Maven and Allure commands

    To run tests and generate an Allure report, first run tests with mvn clean test, then generate and serve the report with allure:serve.
  2. Step 2: Analyze command order

    mvn clean test allure:serve correctly runs clean, then tests, then serves the report. Other options have wrong order or invalid commands.
  3. Final Answer:

    mvn clean test allure:serve -> Option B
  4. Quick Check:

    Run tests then serve report = mvn clean test allure:serve [OK]
Hint: Run tests first, then serve Allure report with Maven [OK]
Common Mistakes:
  • Running allure commands before tests
  • Mixing command order incorrectly
  • Using invalid Allure commands
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