在selenium RC中过滤javascript XHR调用

时间:2011-05-06 10:46:53

标签: java javascript firefox selenium selenium-rc

我遇到了一个用Selenium RC测试的应用程序的疯狂问题

在页面的末尾,javascript脚本会对分析网络服务进行多次调用,这需要几分钟的时间才能响应

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

我正在使用selenium-RC 1.0.1和Firefox 3.5.16

首先,我不能做的事情: - 更改申请(我无法控制) - 更改我的Firefox版本(涉及多个生产机器,我需要此版本) - 使用WebDriver / Selenium 2(由于上述原因)

我认为阻止javascript调用是可以做的事情,但我无法弄清楚如何做到这一点。 - 我正在尝试使用selenium.runScript和selenium.getEval将javascript变量设置为null,但是当它们被设置时为时已晚 - 我正在使用Gecko的Object.watch方法来查看值何时更改,但没有成功

我想知道在创建Dom之前是否有办法通过Selenium过滤内容。我认为可以通过Firefox扩展,但这将是我想做的最后一件事

或者,或许可以识别页面中所有活动的XHR并将其中止

我对一堆新想法持开放态度

感谢您阅读

Grooveek

1 个答案:

答案 0 :(得分:3)

很抱歉听到更改应用程序不是一个选项 - 当我遇到类似情况(通过ajax调用外部分析服务)时,我在JavaScript中为该服务编写了一个模拟,并且我的应用程序的版本是运行单元测试反对使用模拟。 (在这种情况下,它不是我们担心的页面加载速度,它是通过自动化测试运行来分析数据)这使我能够避免命中外部站点,但仍然在我的硒测试中验证我正在调用权利在适当的时间在分析网站的javascript库中调用。

我建议你的情况是你写一个小的HTTP代理(你可能会发现this question的答案很有用,但是如果我这样做的话我会用Perl或Python来做,因为那是非常快速地写入)将请求转发到外部站点,并立即响应空文档或适合您情况的任何内容。 (但处理通常不针对分析站点的所有请求)

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

然后,当您启动selenium RC服务器时,将其指向您的http代理作为上游代理。由selenium服务器启动的浏览器将使用RC服务器作为其代理,然后它将通过您的代理过滤所有内容。

通过这种方法,您基本上可以假装外部网站是您想要的任何内容。