Entering Text Without sendKeys() in Selenium
Yes, we can enter text without sendKeys() by using JavascriptExecutor to set the element''s value property directly via JavaScript.
Basic example:
Java
JavascriptExecutor jse = (JavascriptExecutor) driver;
jse.executeScript("document.getElementById(''Login'').value=''Test text without sendkeys''");
Using WebElement reference:
Java
WebElement inputField = driver.findElement(By.id("username"));
JavascriptExecutor jse = (JavascriptExecutor) driver;
jse.executeScript("arguments[0].value=''myTestUser'';", inputField);
Full test example:
Java
@Test
public void enterTextWithoutSendKeys() {
driver.get("https://example.com/login");
JavascriptExecutor jse = (JavascriptExecutor) driver;
// Set username via JS
jse.executeScript(
"document.getElementById(''username'').value=''admin''"
);
// Set password via JS
jse.executeScript(
"document.getElementById(''password'').value=''password123''"
);
// Click submit button
driver.findElement(By.id("loginBtn")).click();
Assert.assertEquals(driver.getTitle(), "Dashboard");
}
When to use JavascriptExecutor instead of sendKeys():
- ✓Element is read-only but modifiable via JS
- ✓
sendKeys()fails due to element not being interactable - ✓Auto-complete dropdowns that interfere with sendKeys
- ✓Performance: setting large amounts of text instantly
Limitations vs sendKeys():
- ✓Does NOT trigger keyboard events (
keydown,keyup,keypress) - ✓Some frameworks (React, Angular) require actual keyboard events to update component state
- ✓For input validation listeners,
sendKeys()is preferred
Trigger change event after JS value set (for modern frameworks):
Java
jse.executeScript("arguments[0].value=''newValue'';", element);
jse.executeScript("arguments[0].dispatchEvent(new Event(''change''));", element);
jse.executeScript("arguments[0].dispatchEvent(new Event(''input''));", element);
