Rails Watir:在读取元素文本之前等待 5 秒
Posted
技术标签:
【中文标题】Rails Watir:在读取元素文本之前等待 5 秒【英文标题】:Rails Watir: Wait for 5 seconds before reading element text 【发布时间】:2021-06-27 07:47:30 【问题描述】:我有一个包含
元素的网站。
此元素在页面加载时的值为 x 作为 innerhtml,在 z 秒后值为 y。
我不知道 x 和 y 的值是什么,因为它们经常变化。 z 可能介于 0 到 5 之间。因此,我不能使用 wait_until 或 wait_while。所以这真的行不通,因为我不知道要等什么。
Watir::Wait.until(5)
element.text == "abracadabra"
所以我真的需要等待 5 秒钟,然后检查元素的文本。 Watir 是否有某种我可以使用的 timout 功能?喜欢 javascript setTimeout()
?
【问题讨论】:
你在拧测试看看屏幕上是否有元素? 您知道它会发生变化,以便您获得原始值并等待该值不是那个值吗? @Rajagopalan:否元素始终在屏幕上。我想要它改变后的值。变化可以立即发生,也可以在 5 秒内发生。如果更改立即发生,则与从未更改一样。即使我尽快请求,Watir 也会给我更改后的值。 @titusfortner 在大多数情况下这是可能的,但如果更改发生得太快,那么我会完全错过原始值。 Watir 在我第一次请求时给了我更改后的值。 【参考方案1】:这取决于您需要执行此操作的频率,您是否应该更喜欢只进行硬编码睡眠或更动态的操作。
这是另一种选择:
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
【讨论】:
这在大多数情况下都有效,除非更改发生得非常快。在那种情况下,我会完全错过原文。我第一次请求该值时,它已经是更改后的值了。 这就是 timeout: 5 的用途。如果它在第一次检查之前发生了变化,它就像一个睡眠 5。【参考方案2】:你可以使用Ruby的sleep
方法:
sleep(num_secs)
它采用整数或浮点值。
文档在这里:https://apidock.com/ruby/Kernel/sleep
【讨论】:
我不喜欢它,但我想这是我现在唯一的选择。 是的,我知道。 UI 自动化中的硬编码等待通常不是一个好建议。感谢您接受并支持答案。以上是关于Rails Watir:在读取元素文本之前等待 5 秒的主要内容,如果未能解决你的问题,请参考以下文章
Browsermob Proxy + Watir不会持续捕获流量
ruby 的Watir-广泛,得到元素为基础,对孩子,element.rb