2011-05-06 53 views
0

我有一个应用程序我硒RC过滤的javascript XHR硒RC

测试在页面的最后一个疯狂的问题,几个电话都通过一个javascript脚本做出的分析web服务这需要调用从字面上分几秒来响应

Selenium在进入新页面之前等待这些调用结束,尽管他们的响应与进程的良好执行无关 最终,Selenium抛出TimeOut异常(超时设置为4分钟)

我使用硒1.0.1 RC 1.0.1与Firefox 3.5。 16

首先,我不能做: - 更改应用程序(我有没有对其进行控制) - 改变我的Firefox版本(几个生产机器都参与其中,我需要这个版本) - 使用的webdriver /硒2(上面的原因)

我认为拦截JavaScript调用会做的事情,但我无法弄清楚如何做到这一点。 - 我想,有selenium.runScript和selenium.getEval设置的JavaScript变量为null,但为时已晚,当他们设置 - 我用壁虎的Object.watch方法时看到的值改变,但没有成功

我想知道是否有创建大教堂前通过Selenium过滤内容的方式。我认为它会通过Firefox扩展是可能的,但是这将是我想要做的

或者过去的事情,也许是可以识别所有活动XHR页面并中止其

我开一堆的新思路

感谢您阅读

Grooveek

回答

3

很遗憾听到这个改变应用程序是不是一种选择 - 当我遇到了类似的情况(通过Ajax称为外部分析服务) , 一世用JavaScript编写了一个模拟服务,并使用我的应用程序版本运行单元测试,使用模拟。 (在这种情况下,我们担心的不是页面加载速度,而是通过自动化测试运行来减少分析数据)。这使我可以避免碰到外部站点,但仍然在我的硒测试中验证我正在呼叫在适当的时候正确调用分析网站的JavaScript库。

我会建议你的情况是,你写一个小的HTTP代理(你可能会发现this question的答案有用,但如果我这样做,我会用Perl或Python做它,因为这很快写),它会将请求发送到外部站点,并立即以空白文档或任何适合您情况的方式作出响应。 (但处理不是针对分析网站通常都要求)

换句话说,不要试图阻止javascript的直接执行或通过过滤DOM,只是拦截慢外部请求并迅速作出反应。我建议这样做是因为拦截整个请求比筛选内容容易得多。

然后,当你启动Selenium RC服务器,在您的HTTP代理作为上游代理点吧。由硒服务器启动的浏览器将使用RC服务器作为其代理,然后它将通过代理过滤所有内容。

通过这种方法,你基本上可以假装外部网站是你想要的。

+0

感谢您的回应... 这可以做到这一点,但我应该在我的“无法做到”中提到它。我们正在测试数百个不同的网站,并且我不希望仅为1个网站干扰其他测试性能...... 这就是为什么我在谈论javascript解决方案。我希望能够在每个脚本的基础上完成相同的Selenium配置 – Grooveek 2011-05-06 14:20:04