Я реализую некоторые тесты AXAJ, которые я кодирую с помощью API WebDriver.Помимо этого, я мог выполнить произвольный код JavaScript, но мне нужно сделать некоторые пользовательские служебные функции доступными для любых дальнейших ссылок в моих тестах.Проблема в том, что мне нужно динамически загружать свой «встроенный» пользовательский javascript, который находится в файле на моем клиентском пути к классам.Поэтому я не мог использовать обычный подход, который зависит от манипулирования script.src.Я пытался манипулировать script.text, но безуспешно, я получаю ошибку javascript, например: «пропущен; до утверждения».Вы видите что-то не так с моим подходом?Любые другие идеи, как это сделать?
private static final String LOAD_DYNAMIC_JS =
"(function(){" +
"var em = document.createElement('script'); em.type = 'text/javascript';" +
"em.text=\"<![CDATA[" +
"function testalert(){" +
"alert(\"test\");" +
//"}" +
"]]>\";" +
"var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(em, s);"+
"})();";
((JavascriptExecutor)driver).executeScript(LOAD_DYNAMIC_JS);
РЕДАКТИРОВАТЬ На самом деле мой пример был неверным.Потому что на практике я загружаю внедренный скрипт из файла, находящегося в пути к классам.И скрипт там отформатирован с переводом строки.Таким образом, проблема была именно в том, что сообщение об ошибке говорит: «... отсутствует;».Это потому, что скрипт, который я пытаюсь присвоить script.text, на самом деле является строковым литералом для включающей функции ().И строковые литералы в javascript не могут растягиваться на несколько строк, если они не заканчиваются символом «\».Кроме того, во время отладки я понял, что функция включения () не нужна, так как веб-драйвер уже делает это для вставки JavaScript в браузер.Раздел CDATA тоже не нужен.Итак, мой встроенный скрипт для инъекций, который наконец-то сработал:
private static final String LOAD_DYNAMIC_JS =
"var em = document.createElement('script'); em.type = 'text/javascript';" +
"em.text= 'function testalert(){alert('test');};'"+
"var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(em, s);";
((JavascriptExecutor)driver).executeScript(LOAD_DYNAMIC_JS);