【问题标题】:Filtering javascript XHR calls in selenium RC在 selenium RC 中过滤 javascript XHR 调用
【发布时间】:2011-05-06 10:46:53
【问题描述】:

我用 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

【问题讨论】:

    标签: java javascript firefox selenium selenium-rc


    【解决方案1】:

    很遗憾听到不能选择更改应用程序 - 当我遇到类似情况(通过 ajax 调用外部分析服务)时,我用 JavaScript 为该服务编写了一个模拟程序,并获得了我的应用程序版本针对使用模拟运行单元测试。 (在那种情况下,我们担心的不是页面加载速度,而是通过自动化测试运行来破坏分析数据)这使我能够避免访问外部站点,但仍然可以在我调用的 selenium 测试中验证在适当的时间在分析站点的 javascript 库中正确调用。

    对于您的情况,我建议您编写一个小型 HTTP 代理(您可能会发现 this question 的答案很有用,但如果我这样做,我会在 Perl 或 Python 中进行,因为这非常快写)将请求发送到外部站点,并立即以空文档或适合您情况的任何内容进行响应。 (但正常处理所有不针对分析站点的请求)

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

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

    使用这种方法,您基本上可以假装外部网站是您想要的任何东西。

    【讨论】:

    • 感谢您的回复...这可以解决问题,但我应该在“不能做”中提到它。我们正在测试数百个不同的网站,我不想干扰仅 1 个网站的其他测试性能......这就是我谈论 javascript 解决方案的原因。我希望我可以在每个脚本的基础上使用相同的 Selenium 配置做一些事情
    猜你喜欢
    • 1970-01-01
    • 2011-05-01
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    相关资源
    最近更新 更多