将jQuery从1.7升级到1.8.1后,HtmlUnit没有正确重定向

时间:2012-09-11 11:52:05

标签: java ajax testing selenium htmlunit

我正在使用HtmlUnit 2.10点击一个链接,该链接触发重定向到另一个URL的JavaScript。 JavaScript使用window.location来重定向。结果与我直接使用URL打开页面的结果不同。重定向页面结果看起来好像页面仍在加载,尽管它不是。

当查看发送的请求时,看起来好像HtmlUnit请求页面,甚至从我试图重定向到的页面发送ajax-requests,但是没有显示它。我已经尝试将IO写“page.asXml()”写入.html文件以获取页面的预览,它几乎不包含任何内容,就像它仍在加载新内容一样。但是,我也尝试等待最多100秒的页面加载

synchronized (page) {
   page.wait(int x);
}

并且它对结果没有任何影响。

我无法为此错误提供可重现的脚本,因为该页面目前仅在本地运行。

关于什么可能出错的任何想法?

编辑:我可以补充一点,这个问题似乎是从jQuery 1.7.0升级到jQuery 1.8.1而来的。

2 个答案:

答案 0 :(得分:0)

我仍然没有清楚地知道如何彻底解决你的问题,但我已经假设如何更深入地调查你的问题(即你是否已被正确地重定向): 使用cssSelector或xpath在要重定向的页面上本地化1-2个元素。 然后重定向调用fluentWait()

  public WebElement fluentWait(final By locator){
            Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
                    .withTimeout(30, TimeUnit.SECONDS)
                    .pollingEvery(5, TimeUnit.SECONDS)
                    .ignoring(NoSuchElementException.class);

            WebElement foo = wait.until(
    new Function<WebDriver, WebElement>() {
                public WebElement apply(WebDriver driver) {
                            return driver.findElement(locator);
                    }
                    }
    );
                               return  foo;              }     ;

你可以阅读流利的等待here

如果它返回您已重定向到的页面上的网页元素。否则它会失败。 希望这能以某种方式帮助你。

答案 1 :(得分:0)

确保已将WebClient设置为将redirectEnabled字段设置为true。要执行此操作,只需在执行请求之前添加此行...

webClient.setRedirectEnabled(true);

这将确保HtmlUnit客户端遵循重定向。

该方法

Here are the docs