Я научился создавать функции обратного вызова Javascript, и у меня есть общее представление о «функциональном программировании», поскольку это кажется достаточно простым.Тем не менее, я новичок в javascript и его синтаксисе, и я не могу найти хороший способ проверить указанный синтаксис в моей IntelliJ IDE.
Что вы делаете?
Я создаю инструмент на основе Selenium, чтобы нажимать на веб-элемент, ждать, пока он перезагрузит страницу, устареть или подождать тайм-аут.Причина, по которой я это делаю, состоит в том, чтобы классифицировать веб-элементы по трем категориям: вызывает перезагрузку страницы, становится устаревшей, не изменяется.Для этого я сделал простой скрипт javascript с JavascriptExecutor, который поставляется с Java.Большая часть моего кода написана на Java, и это тот язык, которым я владею. Я хочу научиться использовать javascript с java для того, чтобы делать то, что мне нужно, с веб-страницами.
Хорошо, но в чем конкретно проблема?
У меня есть функция обратного вызова javascript:
function test(callback) {callback();}
function Return() {SeleniumTest.isPageReloaded.JavascriptWorking}
window.addEventListener('onload', test(Return));
, которая выполняется внутри Javascript Executor, например так:
System.setProperty("webdriver.chrome.driver",
"C:\\chromedriver_win32\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
String script = "function test(callback) {callback();}" +
"function Return()" +
"{SeleniumTest.isPageReloaded.JavascriptWorking}" +
"window.addEventListener('onload', test(Return));";
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript(script);
Который в основном является сценарием Javascript ранее, выполняя как String.Как вы можете видеть, я пытаюсь вызвать класс Java.SeleniumTest - мой пакет, isPageReloaded - текущий класс, а JavascriptWorking - статический метод в этом классе.Этот статический метод выглядит следующим образом:
public static void JavascriptWorking(){
System.out.println("Javascript ran here");
}
Это должен быть простой способ получить что-то из JavaScript в мой код Java.Причина, по которой я попытался сделать это, заключается в том, что я прочитал это:
https://documentation.progress.com/output/ua/OpenEdge_latest/index.html#page/bpm-appdev/invoking-java-methods-in-javascript.html
Но потом я понял, что это не сработает, и копал глубже.Я прочитал, что Javascript и Java разделены сервером и клиентом, и я получил некоторое понимание этого вопроса:
вызов методов java в коде javascript
Однако я неНа 100% уверен, что это верно для моего случая, так как выполняемый мной Javascript не приходит с веб-страницы, которую я тестирую. Скорее я сделал это сам в коде Java как String.Кроме того, я все еще сильно растерялся, если ответ на этот вопрос действительно относится ко мне.Есть только один, и он в основном просто говорит: «установите некоторые вещи, потому что java - это клиентская часть, а javascript - это серверная».Я (вроде бы) понимаю, что означают эти термины, но я не уверен, что javascript, который я написал в своем классе, будет считаться «серверной», на самом деле это будет не так.Что мне нужно, так это разъяснение по поводу A: действительно ли javascript, который я запускаю / создаю в своем java-коде, на самом деле является серверным?B: если да, то может ли кто-нибудь дать мне краткое изложение того, как я буду вызывать код Java с сервера?это требует разрешений?Я предполагаю, что должен связаться с указанным сервером, значит ли это, что я использую запросы GET и POSt?C: Если Javascript не на стороне сервера, то он должен быть на стороне клиента, и я должен быть в состоянии назвать это довольно легко, верно?Как мне это сделать?
Покажите нам, что именно вы хотите
Я хочу иметь возможность запустить:
System.setProperty("webdriver.chrome.driver",
"C:\\chromedriver_win32\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
String script = "function test(callback) {callback();}" +
"function Return()" +
"{//insert callback code here}" +
"window.addEventListener('onload', test(Return));";
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript(script);
и получить запуск статического метода Java,что-то напечатанное на консоль или каким-либо другим способом, который связывает код javascript с javacode.Так, например, если я вставил правильный код для вызова моего статического метода:
SeleniumTest.IsPageReloaded.JavascriptWorking
(который снова выглядит как):
public static void JavascriptWorking(){
System.out.println("Javascript ran here");
}
Затем яЯ хочу увидеть "Javascript, запущенный здесь" на моей консоли Java.Используемый драйвер является interchangebale, я просто первым использовал chrome, потому что он быстрый.Все, что для этого нужно - это включающий основной класс, и он ((должен)) быть работоспособным, но без обещаний.
Цель состоит в том, чтобы получить что-то в java, которое я затем смогу использовать в качестве флага, чтобы знать, что мой асинхронный javascriptсделано в Java, и я могу продолжить выполнение программы.Я могу получить часть асинхронного JavaScript и понимаю, мне просто нужна ссылка на мой код Java.
Возможные решения
Мне сказали, что обычным способом предоставления флага для вашего java-кода является создание определенного элемента webelement на странице с javascript и проверка его в java (отсюда и ссылка).Мне не хочется добавлять к тестируемым веб-страницам, потому что я хочу протестировать их без фактического редактирования / изменения.Я, как правило, открыт для других простых решений, но самое главное, что мне нужно, это разъяснение всей проблемы на стороне клиента, потому что оно относится к моим настройкам (Selenium java -> javascript -> java), где большинство вопросов покрывают только (javascript -> java)или наоборот.