Forms

Personal Details

Address

Interests

Account Details

Insight

On completion of this exercise, you can learn the following concepts:

  1. sendKeys() — text inputs
  2. clear() — reset fields
  3. click() — radio & checkbox
  4. Select — dropdowns
  5. isSelected() — verify state
  6. submit() / click submit
  7. isDisplayed() — errors
  8. getAttribute("value")
  9. Form validation flow
  10. Success state assertion

Introduction

Forms combine every element type — text inputs, dropdowns, radio buttons, checkboxes, and passwords. Automating them well means:

  1. Filling all field types correctly
  2. Triggering and asserting validation error messages
  3. Submitting and verifying the success state
  4. Resetting and verifying fields are cleared

Key Methods Summary

Action Selenium (Java) Playwright (JS) Playwright (Python)
Fill text input sendKeys("text") fill("text") fill("text")
Select dropdown selectByVisibleText() selectOption({ label: ... }) select_option(label=...)
Radio button click() check() check()
Checkbox click() check() / uncheck() check() / uncheck()
Submit form click() on submit click() on submit click() on submit
Assert error getText() on error el toHaveText(...) to_have_text(...)
Assert visible isDisplayed() toBeVisible() to_be_visible()

1. Fill text inputs

Selenium (Java)

driver.findElement(By.id("firstName")).sendKeys("John");
driver.findElement(By.id("lastName")).sendKeys("Doe");
driver.findElement(By.id("email")).sendKeys("john@example.com");
driver.findElement(By.id("phone")).sendKeys("9876543210");
driver.findElement(By.id("city")).sendKeys("Mumbai");

Playwright (JS)

await page.fill("#firstName", "John");
await page.fill("#lastName", "Doe");
await page.fill("#email", "john@example.com");
await page.fill("#phone", "9876543210");
await page.fill("#city", "Mumbai");

Playwright (Python)

page.fill("#firstName", "John")
page.fill("#lastName", "Doe")
page.fill("#email", "john@example.com")
page.fill("#phone", "9876543210")
page.fill("#city", "Mumbai")

2. Fill date of birth

Selenium (Java)

driver.findElement(By.id("dob")).sendKeys("1995-06-15");

Playwright (JS)

await page.fill("#dob", "1995-06-15");

Playwright (Python)

page.fill("#dob", "1995-06-15")

3. Select a radio button (Gender)

Selenium (Java)

driver.findElement(By.id("gender-male")).click();
assertTrue(driver.findElement(By.id("gender-male")).isSelected());

Playwright (JS)

await page.getByTestId("radio-gender-male").check();
await expect(page.getByTestId("radio-gender-male")).toBeChecked();

Playwright (Python)

page.get_by_test_id("radio-gender-male").check()
expect(page.get_by_test_id("radio-gender-male")).to_be_checked()

4. Select country from dropdown

Selenium (Java)

// shadcn Select is a custom component — click trigger, then option
driver.findElement(By.cssSelector("[data-testid='select-country']")).click();
driver.findElement(By.xpath("//div[text()='India']")).click();

Playwright (JS)

await page.getByTestId("select-country").click();
await page.getByText("India").click();

Playwright (Python)

page.get_by_test_id("select-country").click()
page.get_by_text("India").click()

5. Check interest checkboxes

Selenium (Java)

driver.findElement(By.id("interest-selenium")).click();
driver.findElement(By.id("interest-playwright")).click();
assertTrue(driver.findElement(By.id("interest-selenium")).isSelected());

Playwright (JS)

await page.getByTestId("checkbox-interest-selenium").check();
await page.getByTestId("checkbox-interest-playwright").check();
await expect(page.getByTestId("checkbox-interest-selenium")).toBeChecked();

Playwright (Python)

page.get_by_test_id("checkbox-interest-selenium").check()
page.get_by_test_id("checkbox-interest-playwright").check()
expect(page.get_by_test_id("checkbox-interest-selenium")).to_be_checked()

6. Fill password and confirm password

Selenium (Java)

driver.findElement(By.id("password")).sendKeys("secret123");
driver.findElement(By.id("confirmPassword")).sendKeys("secret123");

Playwright (JS)

await page.fill("#password", "secret123");
await page.fill("#confirmPassword", "secret123");

Playwright (Python)

page.fill("#password", "secret123")
page.fill("#confirmPassword", "secret123")

7. Accept terms and submit

Selenium (Java)

driver.findElement(By.id("terms")).click();
driver.findElement(By.id("submitFormBtn")).click();

Playwright (JS)

await page.getByTestId("checkbox-terms").check();
await page.getByTestId("submit-form-btn").click();

Playwright (Python)

page.get_by_test_id("checkbox-terms").check()
page.get_by_test_id("submit-form-btn").click()

8. Assert validation errors on empty submit

Selenium (Java)

driver.findElement(By.id("submitFormBtn")).click();
 
assertTrue(driver.findElement(By.id("firstNameError")).isDisplayed());
assertEquals("Email is required.", driver.findElement(By.id("emailError")).getText());
assertTrue(driver.findElement(By.id("genderError")).isDisplayed());

Playwright (JS)

await page.getByTestId("submit-form-btn").click();
await expect(page.getByTestId("error-first-name")).toBeVisible();
await expect(page.getByTestId("error-email")).toHaveText("Email is required.");
await expect(page.getByTestId("error-gender")).toBeVisible();

Playwright (Python)

page.get_by_test_id("submit-form-btn").click()
expect(page.get_by_test_id("error-first-name")).to_be_visible()
expect(page.get_by_test_id("error-email")).to_have_text("Email is required.")
expect(page.get_by_test_id("error-gender")).to_be_visible()

9. Assert password mismatch error

Selenium (Java)

driver.findElement(By.id("password")).sendKeys("secret123");
driver.findElement(By.id("confirmPassword")).sendKeys("wrong456");
driver.findElement(By.id("submitFormBtn")).click();
 
assertEquals("Passwords do not match.", driver.findElement(By.id("confirmPasswordError")).getText());

Playwright (JS)

await page.fill("#password", "secret123");
await page.fill("#confirmPassword", "wrong456");
await page.getByTestId("submit-form-btn").click();
await expect(page.getByTestId("error-confirm-password")).toHaveText("Passwords do not match.");

Playwright (Python)

page.fill("#password", "secret123")
page.fill("#confirmPassword", "wrong456")
page.get_by_test_id("submit-form-btn").click()
expect(page.get_by_test_id("error-confirm-password")).to_have_text("Passwords do not match.")

10. Assert success state after valid submit

Selenium (Java)

// after filling all fields correctly...
driver.findElement(By.id("submitFormBtn")).click();
assertTrue(driver.findElement(By.id("formSuccessMsg")).isDisplayed());
assertTrue(driver.findElement(By.id("submittedName")).getText().contains("John"));

Playwright (JS)

await page.getByTestId("submit-form-btn").click();
await expect(page.getByTestId("form-success-msg")).toBeVisible();
await expect(page.getByTestId("submitted-name")).toContainText("John");

Playwright (Python)

page.get_by_test_id("submit-form-btn").click()
expect(page.get_by_test_id("form-success-msg")).to_be_visible()
expect(page.get_by_test_id("submitted-name")).to_contain_text("John")

📄 Also Read: Top 10 Best Automation Practice Website