Ruby on rails Rails Watir:在读取元素文本之前等待5秒钟
我有一个网站,有一个元素 该元素在页面加载时的值x为innerhtml,在z秒后的值y为 我不知道x和y的值是什么,因为它们经常变化。z可以是0到5之间的任何位置。因为这个原因,我不能使用wait_till或wait_while。所以这真的不行,因为我不知道该等什么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
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自动化中的硬编码等待通常不是一个好的建议。感谢您接受并投票表决答案。