Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails Watir:在读取元素文本之前等待5秒钟_Ruby On Rails_Selenium_Sleep_Watir - Fatal编程技术网

Ruby on rails Rails Watir:在读取元素文本之前等待5秒钟

Ruby on rails Rails Watir:在读取元素文本之前等待5秒钟,ruby-on-rails,selenium,sleep,watir,Ruby On Rails,Selenium,Sleep,Watir,我有一个网站,有一个元素 该元素在页面加载时的值x为innerhtml,在z秒后的值y为 我不知道x和y的值是什么,因为它们经常变化。z可以是0到5之间的任何位置。因为这个原因,我不能使用wait_till或wait_while。所以这真的不行,因为我不知道该等什么 Watir::Wait.until(5) { element.text == "abracadabra" } 所以我真的需要等待5秒钟,然后检查元素的文本。Watir是否有我可以使用的timout功能?像j

我有一个网站,有一个元素

该元素在页面加载时的值x为innerhtml,在z秒后的值y为

我不知道x和y的值是什么,因为它们经常变化。z可以是0到5之间的任何位置。因为这个原因,我不能使用wait_till或wait_while。所以这真的不行,因为我不知道该等什么

Watir::Wait.until(5) {
  element.text == "abracadabra"
}

所以我真的需要等待5秒钟,然后检查元素的文本。Watir是否有我可以使用的timout功能?像javascript
setTimeout()

一样,您可以使用Ruby的
sleep
方法:

sleep(num_secs)
它接受整数值或浮点值


文档在这里:

这取决于你需要多久做一次,以及你是更喜欢做硬编码睡眠还是更动态的睡眠

这是另一种选择:

browser.goto my_dynamic_page
dynamic_text_element = browser.h1(locator_opt)
final_text = updated_text(dynamic_text_element)

def updated_text(element)
  original_text = element.text
  begin
    element.wait_until(timeout: 5) { |e| e.text != original_text }
  rescue Watir::Wait::TimeoutError
  end
  element.text
end

您正在编写一个测试,以查看屏幕上是否有元素?您是否知道它会发生变化,从而获得原始值,然后等待值不是原来的值?@Rajagopalan:不,元素始终在屏幕上。我想要更改后的值。这种变化可以立即发生,也可以在5秒内发生。如果更改立即发生,则与从未更改一样。即使我尽快请求,Watir也会给我更改后的值。@在大多数情况下,这是可能的,但如果更改太快,则我会完全忽略原始值。Watir在我第一次请求时给了我更改后的值。这在大多数情况下都有效,除非更改发生得很快。那样的话,我会完全错过原文的。第一次请求该值时,它已经是更改的值。这就是超时:5的含义。如果它在第一次检查之前就改变了,它就像睡觉一样。我不喜欢它,但我想这是我现在唯一的选择。是的,我知道。UI自动化中的硬编码等待通常不是一个好的建议。感谢您接受并投票表决答案。