首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iframe的JQuery脚本没有使用Selenium3

iframe的JQuery脚本没有使用Selenium3
EN

Stack Overflow用户
提问于 2018-11-20 16:43:16
回答 2查看 133关注 0票数 0

我已经创建了一个在浏览器控制台中工作的JQuery脚本,但是它不适用于selenium3自动化。我收到的例外是unknown error: $ is not defined。我读到这个问题是选择器中的第二个参数。我尝试过转义$字符,但它不起作用。

这是我在浏览器控制台中执行的转录本:

$('input[type=file]', $('#fonto').contents()).css('display','block')

但是当我在测试用例中执行时,是不起作用的。这是代码行:

代码语言:javascript
复制
((JavascriptExecutor) getDriver()).executeScript("$('input[type=file]', 
$('#fonto').contents()).css('display','block')");

我需要第二个参数,因为输入在iframe中。

这个问题发生在firefox和chrome浏览器中。

执行此脚本的正确方法是哪一种?

编辑 JQuery未加载。我需要知道如何在执行脚本之前启用JQuery。

EN

回答 2

Stack Overflow用户

发布于 2018-11-21 12:34:35

首先,你应该换到iframe。而不是像这样包含jquery:

代码语言:javascript
复制
            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,您应该再次配置代码。

票数 0
EN

Stack Overflow用户

发布于 2018-11-21 14:40:31

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53397640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档