Bird
Raised Fist0
Selenium Javatesting~8 mins

Getting and setting attributes in Selenium Java - Framework Patterns

Choose your learning style10 modes available
Framework Mode - Getting and setting attributes
Folder Structure
src/
└── test/
    └── java/
        └── com/
            └── example/
                ├── pages/
                │   └── LoginPage.java
                ├── tests/
                │   └── LoginTest.java
                ├── utils/
                │   └── WebDriverFactory.java
                └── config/
                    └── ConfigReader.java
Test Framework Layers
  • Driver Layer: Manages WebDriver setup and teardown (e.g., WebDriverFactory.java).
  • Page Objects: Classes representing web pages with methods to get/set attributes (e.g., LoginPage.java).
  • Tests: Test classes that use page objects to perform actions and assertions (e.g., LoginTest.java).
  • Utilities: Helper classes for common tasks like waits, logging, or reading configs.
  • Configuration: Files and classes to manage environment settings, browser types, and credentials.
Configuration Patterns
  • Use config.properties file to store environment URLs, browser types, and credentials.
  • Load configuration in ConfigReader.java to provide easy access to properties.
  • Allow switching browsers via command line or config file (e.g., Chrome, Firefox).
  • Keep sensitive data like passwords encrypted or use environment variables.
Test Reporting and CI/CD Integration
  • Use TestNG for running tests and generating HTML reports.
  • Integrate with CI tools like Jenkins or GitHub Actions to run tests on code changes.
  • Configure reports to show pass/fail status and screenshots on failure.
  • Use logs to capture attribute values retrieved or set during tests for debugging.
Best Practices
  • Use Page Object Model: Encapsulate attribute get/set methods inside page classes.
  • Explicit Waits: Wait for elements to be present before getting or setting attributes.
  • Do Not Set Attributes Directly Unless Necessary: Prefer user actions (sendKeys, clicks) over JS attribute changes unless testing JS behavior.
  • Keep Tests Independent: Avoid relying on attribute changes from previous tests.
  • Use Clear Naming: Name methods like getInputValue() or setInputAttribute() for clarity.
Self Check

Where in this folder structure would you add a new method to get the "placeholder" attribute of a search input field?

Key Result
Organize Selenium Java tests with Page Objects encapsulating attribute access, supported by config and reporting layers.

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