【问题标题】:Selenium FluentWait wait before starting to pollSelenium FluentWait 等待开始轮询
【发布时间】: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 来实现它的用途。

标签: selenium webdriver wait


【解决方案1】:

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

【讨论】:

  • 是的,这是显而易见的答案。我想看看是否有一种方法可以将所需的功能合并到 Wait 本身中,因为我真的不想过多地玩弄线程计时,但似乎这是不可能的。谢谢。
猜你喜欢
  • 1970-01-01
  • 2010-10-30
  • 1970-01-01
  • 2015-02-17
  • 2012-03-27
  • 2019-12-04
  • 1970-01-01
  • 2013-11-01
  • 2014-01-31
相关资源
最近更新 更多