制作’some_element’.present? 在watir等待不到5秒

我们如何制作some_element.present? 或some_element.visible? 等不到5秒钟。 因为我觉得some_element.present? 在超时之前,将单独等待默认值30秒。

谢谢

我相信你问的是如何缩短超时前的时间长度,默认设置为30秒,请参阅下面有关如何自定义时间的信息。

根据http://watirwebdriver.com/waiting/

明确的等待

您可以使用四种内置方法使您的等待体验更加愉快(并从您的代码中删除那些邪恶的睡眠语句)

Watir::Wait.until { ... }: where you can wait for a block to be true object.when_present.set: where you can do something when it's present object.wait_until_present:; where you just wait until something is present object.wait_while_present:; where you just wait until something disappears The default timeout for all these methods is 30 seconds, but your can pass an argument to any of these to increase (or decrease) it as needed. 

和http://rdoc.info/gems/watir-webdriver/Watir/EventuallyPresent

 - (Object) wait_until_present(timeout = nil) 

等到元素存在。

例子:

 browser.button(:id => 'foo').wait_until_present Parameters: timeout (Fixnum) (defaults to: nil) — seconds to wait before timing out - (Object) wait_while_present(timeout = nil) 

元素存在时等待。

例子:

 browser.button(:id => 'foo').wait_while_present Parameters: timeout (Integer) (defaults to: nil) — seconds to wait before timing out - (Object) when_present(timeout = nil) 

等到元素存在。

例子:

 browser.button(:id => 'foo').when_present.click browser.div(:id => 'bar').when_present { |div| ... } browser.p(:id => 'baz').when_present(60).text Parameters: timeout (Fixnum) (defaults to: nil) — seconds to wait before timing out 

Element#present? (和Element#visible?Element#exists? )方法根本不等。 您可以通过检查尝试查找不存在的元素之前和之后的时间来查看此信息:

 puts Time.now #=> 2014-07-31 22:14:08 -0400 puts browser.element(id: 'does_not_exist').present? #=> false puts Time.now #=> 2014-07-31 22:14:08 -0400 

如您所见,检查元素预设之前和之后的时间可忽略不计。

应该注意的是,上面是针对一个小页面执行的。 对于需要更多检查的非常大的页面,该方法可能需要更长的时间来执行。 然而,这将是执行时间的问题,而不是Watir实际上在等待。