Javascript与Selenium(RC)的通信

3 投票
2 回答
2157 浏览
提问于 2025-04-15 16:31

我的应用程序在用户操作时会进行很多计算,这些计算是用JavaScript完成的。项目会通过控制台输出一些有价值的信息,告诉我们这些计算的进展情况,这样我们就能轻松发现任何出现的NaN(不是一个数字)问题。

我们计划用Python来集成Selenium(RC版本)来测试我们的项目,但如果能在Python的测试案例中获取到控制台输出的信息,我们就能识别出任何NaN或者其他计算错误。

所以,Selenium有没有办法获取这些输出信息呢?最好是在没有控制台的环境下。

如果不行,我想知道是否可以把控制台的输出重定向,也许通过重新绑定console变量到其他东西,这样Selenium就能获取这些输出并通知Python那边。或者如果不能用控制台,还有其他什么方法可以实现这个目标吗?

我知道Selenium有像waitForElementPresent这样的命令,但我不想在应用程序上显示这些中间计算结果,或者这是唯一的方法吗?

任何帮助都非常感谢。

谢谢。

2 个回答

1

如果你只是想测试JavaScript函数是否能用给定的输入进行正确的计算,我建议把你的JavaScript代码和网页分开,使用一个JavaScript测试框架来测试功能。用Selenium来测试底层代码会增加很多不必要的负担。如果你要测试的是完全渲染好的页面,那就需要你的应用程序在服务器上运行,这样就不应该成为测试原始JavaScript的依赖。

我们最近把应用程序从使用jsUnit转为使用YUI Test,到目前为止效果不错。我们在FireFox和IE上运行大约150个测试,时间不到三分钟。虽然我们的测试还不是最理想的——我们还是用Selenium以比较繁琐的方式测试很多JavaScript。但是,把一些用户界面测试转到YUI Test上,确实在我们的持续集成环境中节省了很多时间。

4

这里有一个叫 GetEval() 的函数,它会返回一个 JavaScript 调用的结果。如果你的页面上有 JavaScript 代码,你可以像这样做:

self.assertEqual(selenium.GetEval("this.browserbot.getUserWindow().functionUnderTest().isNaN();"),"false","There was a NaN detected")

浏览器机器人访问功能让你可以在页面上调用 JavaScript 函数并获取结果。如果你得到一个合理的结果,isNaN() 函数会返回 false。

撰写回答