2013-07-24 27 views
1

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

由于页面需要加载一些时间,所以在第一次检查时它总是错误的,但通常在第二次检查时是正确的。有没有什么办法可以等第2秒之前检查第一次?即如果有必要,在时间2,4和6检查,而不是在0,2,4和6?

感谢, BSG

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

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

+0

你应该提到你会有什么优势,首先检查返回true。 –

+0

我不完全确定为什么你需要打扰这一点 - 你正在使用'wait'来达到它的目的。 – Arran

回答

1

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

+0

是的,这是明显的答案。我想看看是否有办法将期望的功能合并到Wait中,因为我并不真的想太多地使用线程时序,但似乎这是不可能的。谢谢。 – bsg

相关问题