【问题标题】:Rails Watir: Wait for 5 seconds before reading element textRails Watir:在读取元素文本之前等待 5 秒
【发布时间】: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 在我第一次请求时给了我更改后的值。

标签: ruby-on-rails selenium sleep 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 自动化中的硬编码等待通常不是一个好建议。感谢您接受并支持答案。
猜你喜欢
  • 2012-12-23
  • 2018-03-15
  • 1970-01-01
  • 2020-07-18
  • 1970-01-01
  • 2017-05-30
  • 2017-06-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多