Getting and setting attributes 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.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.
Now add data-driven testing with 3 different usernames to set and verify the value attribute.
Practice
get an attribute value of a web element in Selenium Java?Solution
Step 1: Understand the method to retrieve attribute
In Selenium Java,getAttributeis used on a WebElement to fetch the value of an attribute.Step 2: Identify correct usage
The syntax iselement.getAttribute("attributeName"), which returns the attribute's value as a string.Final Answer:
Usingelement.getAttribute("attributeName")-> Option DQuick Check:
Get attribute = element.getAttribute("attributeName") [OK]
- Confusing getAttribute with setAttribute
- Trying to use driver.getAttribute instead of element.getAttribute
- Using getText() to get attribute values
set an attribute value of a web element in Selenium Java?Solution
Step 1: Understand Selenium's limitation on setting attributes
Selenium WebElement does not have a directsetAttributemethod.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').Final Answer:
Using JavaScriptExecutor to runarguments[0].setAttribute('value', 'newValue')-> Option AQuick Check:
Set attribute = JavaScriptExecutor + setAttribute() [OK]
- Trying to call setAttribute directly on WebElement
- Assigning value to getAttribute() result
- Using non-existent setValue() method
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?Solution
Step 1: Identify the attribute being fetched
The code callsgetAttribute("value")on the input element, which returns the current value attribute.Step 2: Match attribute value with output
The input field hasvalue="testUser", sovaluevariable will be "testUser" and printed.Final Answer:
testUser -> Option AQuick Check:
getAttribute("value") = "testUser" [OK]
- Confusing getAttribute("value") with getText()
- Expecting attribute name instead of value
- Assuming null if attribute exists
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 symbolSolution
Step 1: Identify why error occurs
WebElement does not have asetAttributemethod, so calling it causes a compile error.Step 2: Use JavaScriptExecutor to set attribute
JavaScriptExecutor can run JavaScript to set attributes on elements, e.g.,arguments[0].setAttribute('placeholder', 'Enter name').Final Answer:
Use JavaScriptExecutor:js.executeScript("arguments[0].setAttribute('placeholder', 'Enter name')", input);-> Option CQuick Check:
Set attribute via JSExecutor = Use JavaScriptExecutor:js.executeScript("arguments[0].setAttribute('placeholder', 'Enter name')", input);[OK]
- Trying to assign value to getAttribute()
- Using non-existent setValue() method
- Using sendKeys() which inputs text, not sets attribute
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
}Solution
Step 1: Check if checkbox is checked by reading 'checked' attribute
IfgetAttribute("checked")returns null, checkbox is not checked.Step 2: Set 'checked' attribute using JavaScriptExecutor
Since WebElement has nosetAttribute, use JavaScriptExecutor to setcheckedattribute to "true".Final Answer:
Use JavaScriptExecutor:js.executeScript("arguments[0].setAttribute('checked', 'true')", checkbox);-> Option BQuick Check:
Set attribute via JSExecutor = Use JavaScriptExecutor:js.executeScript("arguments[0].setAttribute('checked', 'true')", checkbox);[OK]
- Trying to call setAttribute directly on WebElement
- Using assignment on getAttribute() result
- Using click() which toggles but does not set attribute directly
Ready to prove it?
Pass the test and this pattern moves unknown
