【发布时间】:2013-07-24 17:36:10
【问题描述】:
我正在使用 Selenium WebDriver 从使用 Ajax 动态加载的站点获取一些内容。我创建了一个自定义等待类来检查页面上的条件,以确保页面在继续之前已加载。我使用 FluentWait 将轮询间隔设置为 2,超时设置为 10。但是,我注意到它在时间增量 0 处第一次检查,如果条件为假则等待 2 秒,然后再次检查,等等。
由于页面需要 一些 时间来加载,所以在第一次检查时它总是为 false,但在第二次检查时通常为 true。有什么方法可以让 Wait 在第一次检查之前等待 2 秒 ? IE。如有必要,在 2、4 和 6 次检查,而不是在 0、2、4 和 6 次检查?
谢谢, bsg
编辑 我被要求提及为什么我想要这种行为 - 毕竟,我正在使用 Wait 的方式来使用它。我从它第一次返回 true 中获得的好处如下:WebDriver 显然在每次向浏览器发出命令时都会打开一个新套接字。无论出于何种原因,这些套接字并不总是在调用执行后关闭。当在短时间内执行大量调用时(例如,当重复检查条件时,Wait 所做的),可能会耗尽虚拟套接字,驱动程序崩溃。 (缺少足够的虚拟套接字似乎是 Windows 7 上的一个已知问题,但我无法修改我的系统。)
我在短时间内对驱动程序发出的调用越少,超出可用套接字数量的可能性就越小。我观察到第一次检查 never 返回 true,因此它只是无缘无故地打开一个套接字,使程序更有可能崩溃。这就是为什么我想等待。我希望这个解释对搜索有关他们为什么在 WebDriver 中不断收到 SocketExceptions 的信息的人有所帮助。
【问题讨论】:
-
您应该提及通过首先检查返回 true 会有什么优势。
-
我不完全确定您为什么需要为此烦恼 - 您正在使用
wait来实现它的用途。