您如何使用 Selenium 在框架内执行 javascript?

Posted

技术标签:

【中文标题】您如何使用 Selenium 在框架内执行 javascript?【英文标题】:How do you use Selenium to execute javascript within a frame? 【发布时间】: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 上。

【问题讨论】:

【参考方案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 的方法 没有提到硒类型。

以上是关于您如何使用 Selenium 在框架内执行 javascript?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Selenium和Python在reCAPTCHA演示页面上找到多个框架内的多个元素并与之交互。

使用Selenium框架,如何在现有选项卡中执行进程?

使用 Robot 框架实现 Selenium 网格

Python+Selenium框架设计篇之4-框架内封装基类和实现POM

当目标元素和目标元素在不同的帧中时,如何使用 selenium-webdriver 执行拖放?

如何使用 Selenium Java 框架自动化 Shadow DOM