我们如何制作some_element.present?或some_element.visible?等不到5秒钟。因为我觉得some_element.present?在超时之前,将单独等待默认值30秒。
由于
答案 0 :(得分:1)
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实际上在等待。
答案 1 :(得分:0)
我相信你问的是如何缩短超时前的时间长度,默认设置为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