Скрипт 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 сейчас. Если у вас есть вложенные фреймы, вы должны снова настроить код.

Наконец-то я решил проблему, но у меня есть два разных подхода:

  1. Следуйте пункту 2 в этой ссылке. Это означает добавление нового файла в ваш проект, и у него есть очень полезный пример того, как проверить, включен он или нет. В этом случае скрипт должен удалить часть iframe, потому что мы уже в iframe. Что-то вроде этого $('input[type=file]').css('display','block')
  2. Проблема заключалась в том, что в iframe не активен JQuery, а в основном контенте, фрейме по умолчанию, активен JQuery. Затем я могу изменить текущий кадр на кадр по умолчанию, выполнить полный скрипт с помощью селектора iframe ($('input[type=file]', $('#fonto').contents()).css('display','block')). И после этого вернитесь в iframe.

Мой выбор, потому что у меня много проектов, которые исполняют скрипты, я последую за вторым.

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