您如何使用 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演示页面上找到多个框架内的多个元素并与之交互。
Python+Selenium框架设计篇之4-框架内封装基类和实现POM