Javascript与Selenium(RC)的通信
我的应用程序在用户操作时会进行很多计算,这些计算是用JavaScript完成的。项目会通过控制台输出一些有价值的信息,告诉我们这些计算的进展情况,这样我们就能轻松发现任何出现的NaN
(不是一个数字)问题。
我们计划用Python来集成Selenium(RC版本)来测试我们的项目,但如果能在Python的测试案例中获取到控制台输出的信息,我们就能识别出任何NaN
或者其他计算错误。
所以,Selenium有没有办法获取这些输出信息呢?最好是在没有控制台的环境下。
如果不行,我想知道是否可以把控制台的输出重定向,也许通过重新绑定console
变量到其他东西,这样Selenium就能获取这些输出并通知Python那边。或者如果不能用控制台,还有其他什么方法可以实现这个目标吗?
我知道Selenium有像waitForElementPresent这样的命令,但我不想在应用程序上显示这些中间计算结果,或者这是唯一的方法吗?
任何帮助都非常感谢。
谢谢。
2 个回答
如果你只是想测试JavaScript函数是否能用给定的输入进行正确的计算,我建议把你的JavaScript代码和网页分开,使用一个JavaScript测试框架来测试功能。用Selenium来测试底层代码会增加很多不必要的负担。如果你要测试的是完全渲染好的页面,那就需要你的应用程序在服务器上运行,这样就不应该成为测试原始JavaScript的依赖。
我们最近把应用程序从使用jsUnit转为使用YUI Test,到目前为止效果不错。我们在FireFox和IE上运行大约150个测试,时间不到三分钟。虽然我们的测试还不是最理想的——我们还是用Selenium以比较繁琐的方式测试很多JavaScript。但是,把一些用户界面测试转到YUI Test上,确实在我们的持续集成环境中节省了很多时间。
这里有一个叫 GetEval() 的函数,它会返回一个 JavaScript 调用的结果。如果你的页面上有 JavaScript 代码,你可以像这样做:
self.assertEqual(selenium.GetEval("this.browserbot.getUserWindow().functionUnderTest().isNaN();"),"false","There was a NaN detected")
浏览器机器人访问功能让你可以在页面上调用 JavaScript 函数并获取结果。如果你得到一个合理的结果,isNaN() 函数会返回 false。