Как запустить скрипт javascript и передать элемент DOM из Java, имея простой HTML?
Я автоматизирую веб-приложение, которое использует SmartClient, и теперь мне нужен надежный метод для создания локаторов для форм и заполнения полей ввода. У нас есть тестовый фреймворк, основанный на scLocators Selenium и SmartClient. Разработчик теста предоставляет метку ячейки формы, которую он хочет заполнить, и эта ячейка находится в элементе DOM родственного элемента. Я могу проанализировать его ввод и текущий html, чтобы получить внутренний html желаемой ячейки формы. Я решил использовать функцию JavaScript getLocator, предоставляемую SmartGWT: https://code.google.com/p/smartgwt/source/browse/trunk/main/src/com/smartclient/public/sc/system/tools/AutoTest.js?r=37 как я видел, он хорошо работает в расширении SC для Selenium IDE. Как создать DOMElement, требуемый этой функцией, и выполнить этот код JavaScript?
1 ответ
Я хотел бы поделиться с вами общим подходом для выполнения js из java (при работе с selenium webDriver на java) и поделиться некоторыми функциями, которые я использовал:
Я бы порекомендовал вам использовать интерфейс JavascriptExecutor для этой цели, например:
извлечь текст с помощью javascriptExecutor:
String cssSelector="abracadabra";
JavascriptExecutor js = (JavascriptExecutor) driver;
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("var x = $(\""+cssSelector+"\");");
stringBuilder.append("return x.text().toString();");
String res= (String) js.executeScript(stringBuilder.toString());
Assert.assertTrue(res.trim().contains("Assigned VDIs") );
нажмите на элемент либо:
driver.executeScript(“document.getElementById(‘addToCart’).click();”);
или же
public void jsClick(String cssSelector){
JavascriptExecutor js = (JavascriptExecutor) driver;
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("var x = $(\'"+cssSelector+"\');");
stringBuilder.append("x.click();");
js.executeScript(stringBuilder.toString());
}
=================, чтобы подвести итог выполнения JavaScript с использованием подхода WebDriver:
Примеры задач для решения:
-вы можете запустить событие на конкретном элементе. (вызывая событие размытия напрямую)
-вы можете выполнить какой-нибудь скрипт, который выполнит какую-то другую операцию. (вместо того, чтобы нажимать напрямую, вызовите целевой скрипт onclick)
Пример реализации:
Приведите экземпляр WebDriver к JavaScriptExecutor. Выполните сценарий с помощью метода executeScript().
Часть кода:
WebDriver driver = new FirefoxDriver();
JavaScriptExecutor js=(JavaScriptExecutor)driver; //casting driver instance
js.executeScript("return document.title"); //for getting window tile
js.executeScript("return window.name"); //for getting window name
js.executeScript("$('#elementId').blur()"); //firing blur event on an element
Надеюсь, эта информация поможет вам.