0

我正在测试一个需要每 5 秒刷新一次标题元素的 Web 应用程序。每当通过组中使用同一应用程序的任何人发布报价/策略时,该标头元素都会向所有用户更新一条消息。因此,我们的开发人员在所有页面和所有用户上每 5 秒连续进行一次 AJAX 调用。

为了浏览不同的页面,我最初使用隐式等待,例如,

DRIVER.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

在连续的 AJAX 调用之后,我不得不使用 WebDriver 等待显式函数并在浏览页面时查找对象可见性;喜欢,

Wait<WebDriver> wait = new WebDriverWait(DRIVER, 20);
wait.until(visibilityOfElementLocated(By.id(objID)));

(请注意 visibilityOfElementLocated 是另一个处理异常处理的函数。)

我现在的问题是,当我在 IE 8 中运行脚本时,这种显式调用代码更改效果很好。但是,当我在 IE 9 上运行它时,它的行为仍然相同并且无休止地等待页面加载(或等待 AJAX 调用结束)。而且,如果我停止浏览器调用(通过按 Esc 或 x 链接),我的脚本将继续该页面并再次挂起下一页。

任何想法,为什么 IE 9 不能像 IE 8 那样用于页面加载?有没有办法可以调试这个?

PS:我尝试更新 IEDriverServer 但徒劳无功。此外,这在 Chrome 和 FF 浏览器上运行良好。

4

2 回答 2

0

我不能说为什么 IE 8/9 的行为不同。如果您想等待 AJAX 完成,您可以调用 Javascript 语句来检查活动调用。JQuery(我假设您正在使用)$.active可以为您提供当前正在运行的 ajax 调用的数量。因此,您可以将 WebDriver 用作 JavascriptExecutor 并调用此 JS 片段:

return typeof $ === 'function' && $.active === 0;

如果结果为真,则没有正在进行的 AJAX,您可以继续进行测试。

于 2013-10-28T12:00:39.047 回答
0

看起来我想出了原因(遗憾的是不是解决方案)。这是 IE9 的 WebDriver 的 IEDriverServer 中的一个已知问题。

请参阅以下链接:问题 6402:IEDriverServer 始终返回 document.readyState != 使用 SignalR 的应用程序完成 - 库

https://code.google.com/p/selenium/issues/detail?id=6402

于 2013-10-30T22:18:13.043 回答