【问题标题】:How do you use Selenium to execute javascript within a frame?您如何使用 Selenium 在框架内执行 javascript?
【发布时间】:2011-02-15 14:20:27
【问题描述】:

我有一个页面 (index.html),它有一个框架:

<html>
<body>
<iframe src="otherPage.html" />
</body>
</html>

而otherPage.html有内容:

<html>
<head><link src="jquery-min.js" type="text/javascript" /></head>
<body><div id="main">Contents</div></body>
</html>

我正在尝试在 index.html 上使用以下硒代码:

selenium.open("index.html");
selenium.selectFrame("//iframe");
selenium.getEval("window.jQuery('div[id=main]')");

然而,这惨遭失败。它说 jQuery 对象不存在。

如果我尝试像这样在 otherPage 上执行 selenium 测试:

selenium.open("otherPage.html");
selenium.getEval("window.jQuery('div[id=main]')");

一切都很好。

现在这是伪代码,如果人们想让我编译它,我会这样做并放在 github 上。

【问题讨论】:

    标签: java javascript testing iframe selenium


    【解决方案1】:

    Selenium 将 Window 对象存储在自己的对象中,以便更好地操作它。一旦你移动到框架,它应该是这样的。

    selenium.getEval("var window = this.browserbot.getUserWindow();window.jQuery('div[id=main]')");
    

    这应该对你有用

    我的网站上有针对这种情况的教程here

    【讨论】:

    • 知道如何从 selenium IDE 中做到这一点吗?窗口返回没有jQuery的[object XPCNativeWrapper [object Window]](页面加载后很长时间)。
    • 当我希望在 IDE 中执行此操作时,在 google 上的得分很高。命令是 assertEval 目标是脚本(确保你使用 jQuery 从窗口引用它,所以它是 window.$("...) 值是它返回的值。
    【解决方案2】:

    你可以使用:

    JavascriptExecutor js = (JavascriptExecutor) driver;
    js.executeScript("javascript:sendEvent('play');");
    

    【讨论】:

    • 这是使用 Selenium 2 webdriver 的方法
    • 没有提到硒类型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-27
    • 2012-12-14
    • 2012-03-26
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    相关资源
    最近更新 更多