0

我创建了一个可在浏览器控制台中运行的 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。

4

2 回答 2

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,您应该再次配置代码。

于 2018-11-21T12:34:35.913 回答
0

最后我解决了这个问题,但我有两种不同的方法:

  1. 遵循此链接中的第 2 点。这意味着将一个新文件添加到您的项目中,它有一个非常有用的示例来检查它是否启用。在这种情况下,脚本应该删除 iframe 部分,因为我们已经进入 iframe。像这样的东西$('input[type=file]').css('display','block')
  2. 问题是 iframe 没有激活 JQuery,但主要内容,默认框架,激活了 JQuery。然后我可以将当​​前帧更改为默认帧,使用 iframe 选择器 ( $('input[type=file]', $('#fonto').contents()).css('display','block')) 执行完整的脚本。之后返回 iframe。

我的选择,因为我有很多执行脚本的项目,我会遵循第二个。

于 2018-11-21T14:40:31.153 回答