我已经创建了一个在浏览器控制台中工作的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。
发布于 2018-11-21 12:34:35
首先,你应该换到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代码了。如果您有嵌套的iframes,您应该再次配置代码。
发布于 2018-11-21 14:40:31
最后,我解决了这个问题,但我有两种不同的方法:
$('input[type=file]').css('display','block')$('input[type=file]', $('#fonto').contents()).css('display','block'))执行完整的脚本。然后再回到iframe。我的选择,因为我有许多项目,执行脚本,我将遵循第二个。
https://stackoverflow.com/questions/53397640
复制相似问题