Как запустить скрипт 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

Надеюсь, эта информация поможет вам.

Другие вопросы по тегам