</>

Technology

Selenium

Difficulty

Intermediate

Interview Question

Can we enter text without using sendKeys() in Selenium?

Yes, use JavascriptExecutor to set an element's value property directly without using sendKeys().

Answer

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);

Follow AutomateQA

Related Topics