JavaScriptExecutor - это интерфейс в Selenium WebDriver, который позволяет выполнять JavaScript-код непосредственно в браузере. Это мощный инструмент для решения задач, которые сложно или невозможно выполнить стандартными методами WebDriver.
Синтаксис:
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("script", arguments);
Примеры:
// Прокрутка до элемента
WebElement element = driver.findElement(By.id("footer"));
js.executeScript("arguments[0].scrollIntoView(true);", element);
// Прокрутка на определенное количество пикселей
js.executeScript("window.scrollBy(0, 500)"); // Вниз на 500px
js.executeScript("window.scrollBy(0, -200)"); // Вверх на 200px
// Прокрутка до конца страницы
js.executeScript("window.scrollTo(0, document.body.scrollHeight)");
Когда использовать: Когда стандартный click() не работает
js.executeScript("arguments[0].click();", element);
Когда использовать: Для проблемных полей ввода
js.executeScript("arguments[0].value='test@email.com';", emailField);
// Сделать элемент видимым
js.executeScript("arguments[0].style.display='block';", hiddenElement);
// Изменить цвет границы для дебаггинга
js.executeScript("arguments[0].style.border='3px solid red';", element);
// Получить title страницы
String title = (String)js.executeScript("return document.title;");
// Получить текст страницы
String pageText = (String)js.executeScript("return document.documentElement.innerText;");
// Получить значение атрибута
String value = (String)js.executeScript("return arguments[0].getAttribute('data-value');", element);
// Добавить cookie
js.executeScript("document.cookie='username=John Doe; path=/';");
// Получить cookies
String cookies = (String)js.executeScript("return document.cookie;");
js.executeScript("return document.readyState").equals("complete");
// Активация disabled элемента
js.executeScript("arguments[0].removeAttribute('disabled');", disabledButton);
// Пример с обработкой исключений
try {
js.executeScript("arguments[0].click();", problematicButton);
} catch (JavascriptException e) {
System.out.println("Ошибка выполнения JavaScript: " + e.getMessage());
// Альтернативный вариант
new Actions(driver).moveToElement(problematicButton).click().perform();
}
Профессиональный совет: Для сложных взаимодействий создавайте отдельные утилитарные методы с JavaScriptExecutor, например safeClick()
или scrollAndClick()
, чтобы повторно использовать код и улучшить читаемость тестов.