Bird
Raised Fist0
Selenium Javatesting~15 mins

Getting and setting attributes in Selenium Java - Build an Automation Script

Choose your learning style10 modes available
Verify getting and setting attributes of a web element
Preconditions (2)
Step 1: Navigate to the test web page URL.
Step 2: Locate the input field with id 'username'.
Step 3: Get the current value of the 'placeholder' attribute of the input field.
Step 4: Set the 'value' attribute of the input field to 'testuser'.
Step 5: Get the updated 'value' attribute of the input field.
✅ Expected Result: The initial 'placeholder' attribute value is retrieved correctly. The 'value' attribute is set to 'testuser' and verified successfully.
Automation Requirements - Selenium WebDriver with Java and TestNG
Assertions Needed:
Assert that the initial placeholder attribute equals the expected placeholder text.
Assert that the value attribute after setting equals 'testuser'.
Best Practices:
Use explicit waits to ensure the element is present before interacting.
Use By.id locator for the input field.
Use TestNG assertions for validation.
Use try-finally or @AfterMethod to close the browser.
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.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import java.time.Duration;

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

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

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

        // Wait for the input field to be visible
        WebElement usernameInput = wait.until(
            ExpectedConditions.visibilityOfElementLocated(By.id("username"))
        );

        // Get the placeholder attribute
        String placeholder = usernameInput.getAttribute("placeholder");
        Assert.assertEquals(placeholder, "Enter username", "Placeholder text should match");

        // Set the value attribute by sending keys
        usernameInput.clear();
        usernameInput.sendKeys("testuser");

        // Get the updated value attribute
        String value = usernameInput.getAttribute("value");
        Assert.assertEquals(value, "testuser", "Value attribute should be 'testuser'");
    }

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

This test script uses Selenium WebDriver with Java and TestNG to automate the manual test case.

Setup: The @BeforeMethod initializes the ChromeDriver and explicit wait.

Test: The test navigates to the page, waits for the input field with id 'username' to be visible, then retrieves its 'placeholder' attribute and asserts it matches the expected text 'Enter username'.

Next, it clears any existing text and sends the keys 'testuser' to set the value. It then retrieves the 'value' attribute and asserts it equals 'testuser'.

Teardown: The @AfterMethod closes the browser to clean up.

This approach uses explicit waits to avoid timing issues, uses By.id locator for reliability, and TestNG assertions for clear validation messages.

Common Mistakes - 3 Pitfalls
Using Thread.sleep() instead of explicit waits
Using incorrect locator like XPath with absolute path
Trying to set attribute directly via JavaScript without verifying element presence
Bonus Challenge

Now add data-driven testing with 3 different usernames to set and verify the value attribute.

Show Hint

Practice

(1/5)
1. What is the primary method to get an attribute value of a web element in Selenium Java?
easy
A. Using driver.getAttribute("attributeName")
B. Using element.setAttribute("attributeName")
C. Using element.getText()
D. Using element.getAttribute("attributeName")

Solution

  1. Step 1: Understand the method to retrieve attribute

    In Selenium Java, getAttribute is used on a WebElement to fetch the value of an attribute.
  2. Step 2: Identify correct usage

    The syntax is element.getAttribute("attributeName"), which returns the attribute's value as a string.
  3. Final Answer:

    Using element.getAttribute("attributeName") -> Option D
  4. Quick Check:

    Get attribute = element.getAttribute("attributeName") [OK]
Hint: Remember: getAttribute reads, setAttribute does not exist directly [OK]
Common Mistakes:
  • Confusing getAttribute with setAttribute
  • Trying to use driver.getAttribute instead of element.getAttribute
  • Using getText() to get attribute values
2. Which of the following is the correct way to set an attribute value of a web element in Selenium Java?
easy
A. Using JavaScriptExecutor to run arguments[0].setAttribute('value', 'newValue')
B. element.setAttribute("value", "newValue")
C. element.getAttribute("value") = "newValue"
D. element.setValue("newValue")

Solution

  1. Step 1: Understand Selenium's limitation on setting attributes

    Selenium WebElement does not have a direct setAttribute method.
  2. Step 2: Use JavaScriptExecutor to set attribute

    We use JavaScriptExecutor to run JavaScript code that sets the attribute, e.g., arguments[0].setAttribute('value', 'newValue').
  3. Final Answer:

    Using JavaScriptExecutor to run arguments[0].setAttribute('value', 'newValue') -> Option A
  4. Quick Check:

    Set attribute = JavaScriptExecutor + setAttribute() [OK]
Hint: Set attributes via JavaScriptExecutor, not WebElement methods [OK]
Common Mistakes:
  • Trying to call setAttribute directly on WebElement
  • Assigning value to getAttribute() result
  • Using non-existent setValue() method
3. Consider the following Selenium Java code snippet:
WebElement input = driver.findElement(By.id("username"));
String value = input.getAttribute("value");
System.out.println(value);

If the input field has value="testUser", what will be printed?
medium
A. testUser
B. null
C. value
D. username

Solution

  1. Step 1: Identify the attribute being fetched

    The code calls getAttribute("value") on the input element, which returns the current value attribute.
  2. Step 2: Match attribute value with output

    The input field has value="testUser", so value variable will be "testUser" and printed.
  3. Final Answer:

    testUser -> Option A
  4. Quick Check:

    getAttribute("value") = "testUser" [OK]
Hint: getAttribute returns actual attribute value, not element text [OK]
Common Mistakes:
  • Confusing getAttribute("value") with getText()
  • Expecting attribute name instead of value
  • Assuming null if attribute exists
4. You want to set the attribute placeholder of an input element to "Enter name" using Selenium Java. Which code snippet fixes the error below?
// Current code
WebElement input = driver.findElement(By.id("name"));
input.setAttribute("placeholder", "Enter name"); // Error: cannot find symbol
medium
A. Use input.sendKeys("Enter name")
B. Replace with input.getAttribute("placeholder") = "Enter name";
C. Use JavaScriptExecutor: js.executeScript("arguments[0].setAttribute('placeholder', 'Enter name')", input);
D. Use input.setValue("Enter name")

Solution

  1. Step 1: Identify why error occurs

    WebElement does not have a setAttribute method, so calling it causes a compile error.
  2. Step 2: Use JavaScriptExecutor to set attribute

    JavaScriptExecutor can run JavaScript to set attributes on elements, e.g., arguments[0].setAttribute('placeholder', 'Enter name').
  3. Final Answer:

    Use JavaScriptExecutor: js.executeScript("arguments[0].setAttribute('placeholder', 'Enter name')", input); -> Option C
  4. Quick Check:

    Set attribute via JSExecutor = Use JavaScriptExecutor: js.executeScript("arguments[0].setAttribute('placeholder', 'Enter name')", input); [OK]
Hint: Set attributes only via JavaScriptExecutor, not WebElement methods [OK]
Common Mistakes:
  • Trying to assign value to getAttribute()
  • Using non-existent setValue() method
  • Using sendKeys() which inputs text, not sets attribute
5. You want to verify if a checkbox is checked by reading its checked attribute using Selenium Java. Which approach correctly checks this and sets it checked if not already?
WebElement checkbox = driver.findElement(By.id("agree"));
String checked = checkbox.getAttribute("checked");
if (checked == null) {
    // Set checked attribute here
}
hard
A. Use checkbox.setAttribute("checked", "true")
B. Use JavaScriptExecutor: js.executeScript("arguments[0].setAttribute('checked', 'true')", checkbox);
C. Use checkbox.click() to check the box
D. Use checkbox.getAttribute("checked") = "true"

Solution

  1. Step 1: Check if checkbox is checked by reading 'checked' attribute

    If getAttribute("checked") returns null, checkbox is not checked.
  2. Step 2: Set 'checked' attribute using JavaScriptExecutor

    Since WebElement has no setAttribute, use JavaScriptExecutor to set checked attribute to "true".
  3. Final Answer:

    Use JavaScriptExecutor: js.executeScript("arguments[0].setAttribute('checked', 'true')", checkbox); -> Option B
  4. Quick Check:

    Set attribute via JSExecutor = Use JavaScriptExecutor: js.executeScript("arguments[0].setAttribute('checked', 'true')", checkbox); [OK]
Hint: Check attribute with getAttribute; set with JSExecutor [OK]
Common Mistakes:
  • Trying to call setAttribute directly on WebElement
  • Using assignment on getAttribute() result
  • Using click() which toggles but does not set attribute directly
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