Скрипт JQuery для iframe не работает с Selenium3
Я создал скрипт JQuery, который работает в консоли браузера, но он не работает в автоматизации selenium3. Я получаю исключение unknown error: $ is not defined
, Я прочитал, что проблема является вторым аргументом в селекторе. Я пытался избежать $
характер, но это не работает.
Это сценарий, который я выполнил в консоли браузера:
$('input[type=file]', $('#fonto').contents()).css('display','block')
Но когда я выполнил во время моего теста, не работает. Это строка кода:
((JavascriptExecutor) getDriver()).executeScript("$('input[type=file]',
$('#fonto').contents()).css('display','block')");
Мне нужен второй аргумент, потому что вход находится внутри iframe.
Эта проблема возникает в браузерах Firefox и Chrome.
Как правильно выполнить этот скрипт?
РЕДАКТИРОВАТЬ JQuery не загружен. Мне нужно знать, как включить JQuery, прежде чем выполнять мой скрипт.
2 ответа
Во-первых, вы должны переключиться на iframe. Чем включить JQuery, как это:
browser.SwitchTo().Frame("your_iframe");
var jqueryLoad = "if (typeof(jQuery) == 'undefined')";
jqueryLoad += "{";
jqueryLoad += "var iframeBody = document.getElementsByTagName('body')[0];";
jqueryLoad += "var jQuery = function(selector) { return parent.jQuery(selector, iframeBody); };";
jqueryLoad += "var $ = jQuery;";
jqueryLoad += "}";
IJavaScriptExecutor jsExe = browser as IJavaScriptExecutor;
jsExe.ExecuteScript(jqueryLoad);
jsExe.ExecuteScript("Your jquery code here !");
Вы можете выполнить свой код JQuery сейчас. Если у вас есть вложенные фреймы, вы должны снова настроить код.
Наконец-то я решил проблему, но у меня есть два разных подхода:
- Следуйте пункту 2 в этой ссылке. Это означает добавление нового файла в ваш проект, и у него есть очень полезный пример того, как проверить, включен он или нет. В этом случае скрипт должен удалить часть iframe, потому что мы уже в iframe. Что-то вроде этого
$('input[type=file]').css('display','block')
- Проблема заключалась в том, что в iframe не активен JQuery, а в основном контенте, фрейме по умолчанию, активен JQuery. Затем я могу изменить текущий кадр на кадр по умолчанию, выполнить полный скрипт с помощью селектора iframe (
$('input[type=file]', $('#fonto').contents()).css('display','block')
). И после этого вернитесь в iframe.
Мой выбор, потому что у меня много проектов, которые исполняют скрипты, я последую за вторым.