Dependency between tests in Selenium Java - Build an Automation Script
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.time.Duration; public class DependencyBetweenTests { private WebDriver driver; private WebDriverWait wait; @BeforeClass public void setUp() { // Set path to chromedriver if needed driver = new ChromeDriver(); wait = new WebDriverWait(driver, Duration.ofSeconds(10)); driver.manage().window().maximize(); } @Test public void testLogin() { driver.get("https://example.com/login"); WebElement usernameField = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("username"))); usernameField.sendKeys("testuser"); WebElement passwordField = driver.findElement(By.id("password")); passwordField.sendKeys("Test@1234"); WebElement loginButton = driver.findElement(By.id("loginBtn")); loginButton.click(); wait.until(ExpectedConditions.urlToBe("https://example.com/dashboard")); Assert.assertEquals(driver.getCurrentUrl(), "https://example.com/dashboard", "URL after login should be dashboard"); } @Test(dependsOnMethods = {"testLogin"}) public void testProfileUpdate() { WebElement profileLink = wait.until(ExpectedConditions.elementToBeClickable(By.id("profileLink"))); profileLink.click(); WebElement profileNameField = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("profileName"))); profileNameField.clear(); profileNameField.sendKeys("Test User Updated"); WebElement saveButton = driver.findElement(By.id("saveProfileBtn")); saveButton.click(); WebElement successMsg = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("successMsg"))); String successText = successMsg.getText(); Assert.assertTrue(successText.contains("Profile updated successfully"), "Success message should confirm profile update"); } @AfterClass public void tearDown() { if (driver != null) { driver.quit(); } } }
The setUp method initializes the Chrome WebDriver and sets an explicit wait for 10 seconds.
The testLogin method opens the login page, enters username and password, clicks login, and waits until the URL changes to the dashboard URL. It asserts the URL to confirm successful login.
The testProfileUpdate method depends on testLogin using @Test(dependsOnMethods = {"testLogin"}). This ensures it runs only if login passes. It clicks the profile link, updates the profile name, clicks save, and asserts the success message is displayed.
Explicit waits ensure elements are ready before interacting, avoiding flaky tests.
The tearDown method closes the browser after tests finish.
This structure shows how to create test dependencies in TestNG and use Selenium best practices.
Now add data-driven testing with 3 different user credentials for login and profile names