我已经创建了一个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。
答案 0 :(得分:0)
首先,您应该切换到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代码。如果您嵌套了iframe,则应重新配置代码。
答案 1 :(得分:0)
最后我已经解决了问题,但是我有两种不同的方法:
$('input[type=file]').css('display','block')
$('input[type=file]', $('#fonto').contents()).css('display','block')
)执行完整脚本。然后返回iframe。我的选择,因为我有许多执行脚本的项目,所以我将遵循第二个。