Bird
Raised Fist0
Selenium Javatesting~15 mins

Submitting forms in Selenium Java - Build an Automation Script

Choose your learning style10 modes available
Submit a contact form and verify submission success
Preconditions (3)
Step 1: Enter 'John Doe' in the Name field
Step 2: Enter 'john.doe@example.com' in the Email field
Step 3: Enter 'Hello, this is a test message.' in the Message field
Step 4: Click the Submit button
Step 5: Wait for the success message element with id='successMsg' to be visible
✅ Expected Result: The success message 'Thank you for contacting us!' is displayed on the page
Automation Requirements - Selenium WebDriver with Java and TestNG
Assertions Needed:
Verify the success message element is displayed
Verify the success message text equals 'Thank you for contacting us!'
Best Practices:
Use explicit waits to wait for elements
Use By.id locators for form fields and buttons
Use Page Object Model to separate page interactions
Use TestNG assertions for validation
Automated Solution
Selenium Java
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 ContactFormTest {
    private WebDriver driver;
    private WebDriverWait wait;

    @BeforeClass
    public void setUp() {
        // Set path to chromedriver executable if needed
        driver = new ChromeDriver();
        wait = new WebDriverWait(driver, Duration.ofSeconds(10));
        driver.manage().window().maximize();
    }

    @Test
    public void testSubmitContactForm() {
        driver.get("https://example.com/contact");

        // Fill in the Name field
        WebElement nameField = wait.until(ExpectedConditions.elementToBeClickable(By.id("name")));
        nameField.clear();
        nameField.sendKeys("John Doe");

        // Fill in the Email field
        WebElement emailField = driver.findElement(By.id("email"));
        emailField.clear();
        emailField.sendKeys("john.doe@example.com");

        // Fill in the Message field
        WebElement messageField = driver.findElement(By.id("message"));
        messageField.clear();
        messageField.sendKeys("Hello, this is a test message.");

        // Click the Submit button
        WebElement submitButton = driver.findElement(By.id("submitBtn"));
        submitButton.click();

        // Wait for the success message to appear
        WebElement successMsg = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("successMsg")));

        // Verify the success message is displayed
        Assert.assertTrue(successMsg.isDisplayed(), "Success message should be displayed");

        // Verify the success message text
        String expectedText = "Thank you for contacting us!";
        Assert.assertEquals(successMsg.getText().trim(), expectedText, "Success message text should match");
    }

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

This test uses Selenium WebDriver with Java and TestNG to automate submitting a contact form.

Setup: We create a ChromeDriver instance and a WebDriverWait for explicit waits.

Test steps: We open the contact page URL, then locate each form field by its id. We clear any existing text and enter the test data exactly as specified.

We click the submit button, then wait explicitly for the success message element to become visible.

Assertions: We check that the success message is displayed and that its text matches the expected message.

Teardown: We close the browser after the test.

This approach uses explicit waits to avoid timing issues, uses clear locators by id, and uses TestNG assertions for clear validation messages.

Common Mistakes - 4 Pitfalls
Using Thread.sleep() instead of explicit waits
Using brittle XPath locators like absolute paths
Not clearing input fields before sending keys
Not quitting the WebDriver after tests
Bonus Challenge

Now add data-driven testing with 3 different sets of form inputs (name, email, message) using TestNG data provider.

Show Hint

Practice

(1/5)
1. In Selenium Java, which method is used to submit a form on a web page?
easy
A. submit()
B. click()
C. sendKeys()
D. getText()

Solution

  1. Step 1: Understand form submission in Selenium

    The submit() method is designed specifically to submit forms in Selenium.
  2. Step 2: Differentiate from other methods

    Methods like click() simulate clicking but do not necessarily submit forms; sendKeys() inputs text; getText() retrieves text.
  3. Final Answer:

    submit() -> Option A
  4. Quick Check:

    Form submission method = submit() [OK]
Hint: Use submit() to send form data, not click() [OK]
Common Mistakes:
  • Using click() instead of submit() to send form
  • Confusing sendKeys() with form submission
  • Trying to submit without locating form element
2. Which of the following is the correct way to submit a form using Selenium WebDriver in Java?
easy
A. driver.findElement(By.id("formId")).submit();
B. driver.submit(By.id("formId"));
C. driver.findElement(By.id("formId")).click();
D. driver.findElement(By.id("formId")).sendKeys("submit");

Solution

  1. Step 1: Locate the form element correctly

    Use findElement(By.id("formId")) to get the form element by its ID.
  2. Step 2: Call submit() on the form element

    Calling submit() on the form element sends the form data.
  3. Final Answer:

    driver.findElement(By.id("formId")).submit(); -> Option A
  4. Quick Check:

    Correct syntax = driver.findElement(...).submit() [OK]
Hint: Call submit() on the form element, not on driver [OK]
Common Mistakes:
  • Trying to call submit() directly on driver
  • Using click() instead of submit() on form
  • Sending keys 'submit' instead of calling submit()
3. What will happen when the following Selenium Java code runs?
WebElement input = driver.findElement(By.name("username"));
input.sendKeys("user1");
input.submit();
medium
A. Only the input field is cleared but form is not submitted.
B. An exception is thrown because submit() cannot be called on input elements.
C. The form containing the input field is submitted with 'user1' as username.
D. The page reloads without submitting any data.

Solution

  1. Step 1: Identify element and actions

    The code finds an input field named "username", enters "user1" text, then calls submit() on that input element.
  2. Step 2: Understand submit() behavior on child elements

    Calling submit() on any child element inside a form submits the entire form containing that element.
  3. Final Answer:

    The form containing the input field is submitted with 'user1' as username. -> Option C
  4. Quick Check:

    submit() on input submits parent form [OK]
Hint: submit() on input submits its parent form [OK]
Common Mistakes:
  • Thinking submit() only works on form elements
  • Expecting submit() to clear input instead of submitting
  • Assuming submit() throws exception on input elements
4. Consider this Selenium Java code snippet:
WebElement form = driver.findElement(By.id("loginForm"));
form.click();
form.submit();

What is the main issue with this code?
medium
A. submit() must be called before click() on the form.
B. submit() cannot be called on a form element.
C. The form element is not located correctly.
D. Calling click() on the form element may cause unexpected behavior before submit.

Solution

  1. Step 1: Analyze click() on form element

    Calling click() on a form element is unusual and may trigger unexpected UI behavior or errors.
  2. Step 2: Confirm submit() usage

    Calling submit() on the form element is correct and will submit the form.
  3. Final Answer:

    Calling click() on the form element may cause unexpected behavior before submit. -> Option D
  4. Quick Check:

    click() on form is risky; submit() is correct [OK]
Hint: Avoid click() on form; use submit() directly [OK]
Common Mistakes:
  • Thinking submit() cannot be called on form
  • Assuming click() is needed before submit()
  • Ignoring potential side effects of clicking form
5. You want to submit a form that has no id or name attribute but contains a submit button with class "submit-btn". Which Selenium Java code correctly submits the form?
hard
A. driver.findElement(By.className("submit-btn")).submit();
B. driver.findElement(By.className("submit-btn")).click();
C. driver.findElement(By.tagName("form")).submit();
D. driver.findElement(By.tagName("button")).submit();

Solution

  1. Step 1: Locate the submit button by class

    Since the form lacks id or name, find the submit button using its class "submit-btn".
  2. Step 2: Call click() on the submit button element

    Calling click() on the submit button simulates pressing the button, which submits the form.
  3. Final Answer:

    driver.findElement(By.className("submit-btn")).click(); -> Option B
  4. Quick Check:

    click() on submit button triggers form submission [OK]
Hint: Submit form by clicking the submit button [OK]
Common Mistakes:
  • Using submit() instead of click() on submit button
  • Trying to submit form by tagName without verifying uniqueness
  • Calling submit() on button tag which may not be inside form
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