PURPOSE: Use JS for actions WebDriver struggles with, like interacting with shadow DOM, scrolling, or forcing clicks.
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("return document.title;");js.executeScript("arguments[0].scrollIntoView(true);", element);js.executeScript("arguments[0].click();", element);js.executeScript("arguments[0].value = 'test@example.com';", element);// Purpose: Get element inside shadow root using JS and return it to WebDriver
WebElement shadowHost = driver.findElement(By.cssSelector("my-component"));
WebElement inner = (WebElement) ((JavascriptExecutor)driver)
.executeScript("return arguments[0].shadowRoot.querySelector('button')", shadowHost);
inner.click();- JS execution can bypass application behavior, so use judiciously.
- Prefer proper locators or framework hooks before relying on JS.