Ruby 制作';某些元素';。目前在水中等待不到5秒

Ruby 制作';某些元素';。目前在水中等待不到5秒,ruby,cucumber,watir,Ruby,Cucumber,Watir,我们如何制作一些礼物?或者某个元素是可见的?等待不到5秒。?因为我觉得有什么元素存在?在超时之前,将单独等待默认值30秒 感谢方法根本不等待元素#存在?(和元素#可见?和元素#存在?)。通过检查尝试查找不存在的元素之前和之后的时间,可以看到这一点: puts Time.now #=> 2014-07-31 22:14:08 -0400 puts browser.element(id: 'does_not_exist').present? #=> false puts Time.now

我们如何制作一些礼物?或者某个元素是可见的?等待不到5秒。?因为我觉得有什么元素存在?在超时之前,将单独等待默认值30秒

感谢方法根本不等待
元素#存在?
(和
元素#可见?
元素#存在?
)。通过检查尝试查找不存在的元素之前和之后的时间,可以看到这一点:

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实际正在等待。

元素#present?(和元素#visible?和元素#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实际正在等待的问题。

我相信您是在询问如何缩短超时前的时间长度,默认情况下,超时时间设置为30秒,请参阅下面关于如何自定义该时间的内容

显式等待

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

等待元素出现

示例:

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
在元素存在时等待

示例:

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
等待元素出现

示例:

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

我相信您正在询问如何缩短超时前的时间长度,默认设置为30秒,请参阅下面关于如何自定义该时间的内容

显式等待

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

等待元素出现

示例:

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
在元素存在时等待

示例:

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
等待元素出现

示例:

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

所以我认为它不好用。现在?对于ajax元素,对吗。一般我用现在的?在单击元素之前检查该元素是否存在。所以,我应该如何编写代码来检查页面中是否存在元素,并在4秒后超时。如果不存在。感谢您澄清.present的用法?我相信你。现在吗?还有wait_until_present(x)也解决了ajax问题。所以我认为使用它不好。present?对于ajax元素,对吗。一般我用现在的?在单击元素之前检查该元素是否存在。所以,我应该如何编写代码来检查页面中是否存在元素,并在4秒后超时。如果不存在。感谢您澄清.present的用法?我相信你。现在吗?还有等待直到现在(x)也解决了ajax问题。谢谢Carldmitch。非常感谢。等到现在(x)解决了我的问题。谢谢。所以,我如何做一些事情,比如,如果元素存在,单击它,如果不存在,则移动到测试中的下一步。对我来说,它看起来像是在使用:If button.present?这样做。。。。结束。移到下一行。但如果该元素是ajax元素并且需要等待几秒钟,我应该怎么做呢。如果有?不要等到if语句失败,因为元素还没有加载到页面中。谢谢Carldmitch..非常感谢。等到现在(x)解决了我的问题。谢谢。所以,我如何做一些事情,比如,如果元素存在,单击它,如果不存在,则移动到测试中的下一步。对我来说,它看起来像是在使用:If button.present?这样做。。。。结束。移到下一行。但如果该元素是ajax元素并且需要等待几秒钟,我应该怎么做呢。如果有?不要等待if语句在那里失败,因为元素还没有加载到页面中。