1

我正在使用 Selenium WebDriver 从使用 Ajax 动态加载它的站点获取一些内容。我创建了一个自定义等待类来检查页面上的条件,以确保页面在继续之前已加载。我使用 FluentWait 将轮询间隔设置为 2,超时设置为 10。但是,我注意到它在时间增量 0 处第一次检查,如果条件为假则等待 2 秒,然后再次检查,等等。

由于页面需要一些时间来加载,所以在第一次检查时它总是为假,但在第二次检查时通常为真。有什么方法可以让 Wait在第一次检查之前等待 2 秒?即如果需要,在 2、4 和 6 次检查,而不是在 0、2、4 和 6 次检查?

谢谢,bsg

编辑 我被要求提及为什么我想要这种行为 - 毕竟,我正在使用 Wait 它的使用方式。我从它第一次返回 true 中获得的好处如下:WebDriver 显然在每次向浏览器发出命令时都会打开一个新套接字。无论出于何种原因,这些套接字并不总是在调用执行后关闭。当在短时间内执行大量调用时(例如,当重复检查条件时,Wait 所做的),可能会耗尽虚拟套接字,驱动程序崩溃。(缺少足够的虚拟套接字似乎是 Windows 7 上的一个已知问题,但我无法修改我的系统。)

我在短时间内对驱动程序发出的调用越少,超出可用套接字数量的可能性就越小。我观察到第一次检查永远不会返回 true,因此它只是无缘无故地打开一个套接字,使程序更有可能崩溃。这就是为什么我想等待。我希望这个解释对搜索有关他们为什么在 WebDriver 中不断收到 SocketExceptions 的信息的人有所帮助。

4

1 回答 1

1

显而易见的答案是time.sleep(2)在第一次检查之前插入一个(或类似的方法)。这对你想做的事情有用吗?

于 2013-07-24T18:29:27.503 回答