iframe的jQuery脚本不适用于Selenium3

时间:2018-11-20 16:43:16

标签: javascript jquery selenium 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 个答案:

答案 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)

最后我已经解决了问题,但是我有两种不同的方法:

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

我的选择,因为我有许多执行脚本的项目,所以我将遵循第二个。